六,数组笔记及相关练习题大全
Java编程基础:数组详解
在Java编程中,数组是一块连续固定大小的内存空间,用于存储相同类型的多个元素。数组提供了索引的概念,允许通过索引访问和操作数组中的元素。本文将详细探讨Java中数组的定义、初始化、使用和示例。
数组的定义和初始化
数组在定义时需要指定数据类型和数组名。
定义数组的语句格式
数据类型[] 数组名; // 推荐
数据类型 数组名[];
如果只定义数组而不初始化,相当于一个变量没有值,不能直接使用。
如何对数组进行初始化?
- 动态初始化:指定数组大小,数组中的默认值由Java虚拟机(JVM)赋值。
- 静态初始化:指定元素值,由JVM根据给定的值的数量设置数组大小。
动态初始化语句定义格式
数据类型[] 数组名 = new 数据类型[元素的个数];
一维数组
动态初始化
int[] numbers = new int[5]; // 创建一个长度为5的整型数组,元素默认值为0
静态初始化
int[] numbers = {1, 2, 3, 4, 5}; // 创建一个长度为5的整型数组,元素为1到5
二维数组
二维数组的元素是一维数组。
定义格式1
数据类型[][] 数组名 = new 数据类型[m][n];
举例
int[][] arr = new int[2][3]; // 创建一个2行3列的二维整型数组
定义格式2
数据类型[][] 数组名 = new 数据类型[m][];
举例
int[][] arr = new int[2][]; // 创建一个2行不指定列的二维整型数组
arr[0] = new int[]{11, 222, 33, 44};
arr[1] = new int[]{100, 200};
定义格式3
数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2...},{元素1,...},...};
举例
int[][] arr = new int[][]{{11,22,33,44},{100,200}}; // 创建一个二维整型数组
简化写法
int[][] arr = {{11,22,33,44},{100,200}}; // 简化写法
代码示例
public class ArrayExample {
public static void main(String[] args) {
// 一维数组
int[] numbers = new int[]{1, 2, 3, 4, 5}; // 静态初始化
System.out.println("One-dimensional array:");
for(int number : numbers) {
System.out.println(number);
}
// 二维数组
int[][] matrix = new int[2][3]; // 动态初始化
matrix[0][0] = 11;
matrix[0][1] = 12;
matrix[0][2] = 13;
matrix[1][0] = 21;
matrix[1][1] = 22;
matrix[1][2] = 23;
System.out.println("\nTwo-dimensional array:");
for(int[] row : matrix) {
for(int element : row) {
System.out.print(element + " ");
}
System.out.println();
}
}
}
数组相关练习题
习题一
//使用数组输出九九乘法表
public class Table99 {
public static void main(String[] args) {
// 外层循环控制行数,从1到9
for(int i = 1; i < 10; i++) {
// 内层循环控制每行中打印的乘法表项数,从1到当前行数i
for(int j = 1; j <= i; j++) {
// 打印每个乘法表项,格式为 j*i,后面跟一个制表符\t
System.out.print(j + "*" + i + "=" + i * j + "\t");
}
// 每完成一行乘法表的打印后换行
System.out.println();
}
}
}
习题二
//使用冒泡排序对数组a={6,3,5,4,10,9}进行排序
public class BubblingSorting {
public static void main(String[] args) {
// 初始化数组
int[] a = {6, 3, 5, 4, 10, 9};
int temp; // 用于交换数组元素的临时变量
// 外层循环控制排序的轮数,从0到数组长度减1
for(int i = 0; i < a.length - 1; i++) {
// 内层循环控制每轮排序的比较次数,从当前轮的下一个元素开始到数组末尾
for(int j = i + 1; j < a.length; j++) {
// 如果当前元素大于下一个元素,则交换它们
if(a[i] > a[j]) {
temp = a[i]; // 保存当前元素
a[i] = a[j]; // 将下一个元素放到当前位置
a[j] = temp; // 将保存的当前元素放到下一个位置
}
}
}
// 打印排序后的数组
System.out.print("排序后:" + "\t");
for(int n = 0; n < a.length; n++) {
System.out.print(a[n] + "\t"); // 打印每个元素,后面跟一个制表符
}
}
}
习题三
//对数组arr={0,1,2,3,4,5,6,7,8,9,10}实现二分查找(注意:二分查找的前提是数组有序,所以若是要查找的数组无序,就要先对其排序)
import java.util.Scanner;
public class BinarySearch {
public static void main(String[] args) {
// 创建Scanner对象用于读取用户输入
Scanner sc = new Scanner(System.in);
// 定义并初始化一个有序数组
int[] arr = {0, 1,2,3,4,5,6,7,8,9,10};
// 初始化查找范围的起始和结束索引
int front = 0, end = arr.length - 1, mid = (front + end) / 2;
// 标记是否找到结果
boolean result = false;
// 提示用户输入要查找的数
System.out.println("请输入你要查找的数:");
int num = sc.nextInt(); // 读取用户输入的数
// 进行二分查找循环
for(front = 0; front <= end;) {
// 计算中间索引
mid = (front + end) / 2;
// 比较中间值和目标值
if(num < arr[mid]) {
end = mid - 1; // 调整查找范围的结束索引
// 更新中间索引
// 重新计算中间索引
mid = (front + end) / 2;
} else if(num > arr[mid]) {
front = mid + 1; // 调整查找范围的起始索引
// 更新中间索引
mid = (front + end) / 2;
} else if(num == arr[mid]) {
result = true; // 标记找到结果
break; // 退出循环
}
}
// 输出查找结果
if(result) {
System.out.println("查询成功,该数的索引值为:" + mid);
} else {
System.out.println("查询失败,没有该数");
}
}
}
习题四
//对数组arr = {10, 20, 3, 11, 5, 6, 15}进行选择排序
public class SelectionSort {
public static void main(String[] args) {
// 初始化数组
int[] arr = {10, 20, 3, 11, 5, 6, 15};
int n = arr.length; // 获取数组的长度
// 外层循环控制排序的轮数,从0到数组长度减1
for (int i = 0; i < n - 1; i++) {
int min_idx = i; // 初始化每轮的最小元素索引为当前轮的起始索引
// 内层循环找到本轮中最小元素的索引
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[min_idx]) {
min_idx = j; // 更新最小元素的索引
}
}
// 交换当前位置的元素和本轮找到的最小元素
int temp = arr[min_idx];
arr[min_idx] = arr[i];
arr[i] = temp;
}
// 打印排序后的数组
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t"); // 打印每个元素,后面跟一个制表符
}
}
}