数组
一维数组
一维数组
一维数组是个容器保存数据保存相同数据类型数据
数组第一种声明方式:
数据类型[] 数组名 = 初值;
其中数据类型代表:数组中盛放数据的数据类型
int[] array = new int[5];
array[2] = 8;
System.out.println(array[2]);
array = null;
数组的第二种声明方式:
int[] array = new int[] {1, 2, 3, 4, 5};
int length = array.length;
System.out.println(length);
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
例如:
int[] random = new int[10];
int max = 0;
int min = 400;
for (int i = 0; i < random.length; i++) {
random[i] = (int)(Math.random() * (300 - 18 + 1) + 18);
if (max < random[i]) {
max = random[i];
}
if(min > random[i]) {
min = random[i];
}
}
System.out.println("最大值为:" + max);
System.out.println("最小值为:" + min);
for (int i = 0; i < random.length; i++) {
System.out.print(random[i] + " ");
}
查找数组内元素/角标
1.通过角标查找对应的元素
2.通过元素查找该元素在数组中的位置(角标)
int n = (int)(Math.random() * 5 + 1);
System.out.println(findArray(n));
public static char findArray(int index) {
char[] array = new char[] {'一', '二', '三', '四', '五'};
return array[index - 1];
}
int[] array = new int[] {3, 6, 11, 22};
int n = findIndex(10, array);
if (n == -1) {
System.out.println("输入数字不存在!");
} else {
System.out.println(n);
}
public static int findIndex(int num, int[] array) {
for (int i = 0; i < array.length; i++) {
if (array[i] == num) {
return i;
}
}
return -1;
}
变量在内存中的表现图解
数组定义图解
数组元素反转
int[] array = new int[] {1, 2, 3, 4, 5};
reverse(array);
String string = Arrays.toString(array);
System.out.println(string);
public static void reverse(int[] array) {
for (int i = 0; i < array.length / 2; i++) {
int temp =array[i];
array[i] = array[array.length - i - 1];
array[array.length - i - 1] = temp;
}
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
例如:
int x = 10;
int y = 15;
reverseNum(x, y);
public static void reverseNum(int a, int b) {
int temp;
temp = a;
a = b;
b = temp;
System.out.println("x = " + a + ",y = " + b);
}
数组反转图解
数字元素和数组元素交换的不同图解
数组排序
冒泡排序
冒泡排序(冒泡其实就是按照什么思想去排序)
核心排序思想:相邻两个数进行比较,交换位置
分析:
int[] array = new int[]{3, 2, 5, 1}
3 2 5 1
第一趟 比较完毕,确定一个最大值,放到最后
第一次:2 3 5 1
第二次:2 3 5 1
第三次:2 3 1 5
length - 1 - 0
第二趟
第一次:2 3 1 5
第二次:2 1 3 5
length - 1 - 1
第三趟
第一次:1 2 3 5
length - 1 - 2
例如:
public static void main(String[] args) {
int[] array = new int[] {1, 2, 3, 4, 5};
changeArray(2, 3, array);
System.out.println(Arrays.toString(array));
int[] array1 = new int[] {3, 2, 5, 1, 7, 6, 9};
for (int i = 0; i < array1.length - 1; i++) {
for (int j = 0; j < array1.length - 1 - i; j++) {
if (array1[j] > array1[j + 1]) {
int temp = array1[j];
array1[j] = array1[j + 1];
array1[j + 1] = temp;
}
}
}
System.out.println(Arrays.toString(array1));
}
public static void changeArray(int x, int y, int[] array) {
int temp = array[x];
array[x] = array[y];
array[y] = temp;
}
冒泡排序图解
选择排序
核心排序思想:选择一个数依次和后面的数比较换位
分析:
array[0] --- array[1] array[2] array[3]
array[1] --- array[2] array[3]
array[2] --- array[3]
例如:
public static void main(String[] args) {
int[] array = new int[] {5, 3, 4, 2, 1, 7, 9, 6, 8};
for (int i = 0; i < array.length - 1; i++) {
for (int j = 1 + i; j < array.length; j++) {
if (array[i] > array[j]) {
int temp = array[j];
array[j] = array[i];
array[i] = temp;
}
}
}
System.out.println(Arrays.toString(array));
}
折半查找
折半查找(提高效率的查找)
前提:数组中查找 查找这个数在数组中的角标
注意:在有序的数组中查找
思想:
public static void main(String[] args) {
int random = (int)(Math.random() * (100 - 1 + 1) + 1);
System.out.println("请输入一个数:");
Scanner scanner = new Scanner(System.in);
while (true) {
String string = scanner.nextLine();
int newNum = Integer.parseInt(string);
if (newNum > random) {
System.out.println("大了");
} else if (newNum < random) {
System.out.println("小了");
} else {
System.out.println("猜中了");
break;
}
}
System.out.println("电脑随机数为:" + random);
scanner.close();
}
例如:
public static void main(String[] args) {
int[] array = new int[] {11, 25, 37, 48, 54, 62, 75, 87, 98};
int min = 0;
int max = array.length - 1;
int mid = (min + max) / 2;
int key = 10;
while (key != array[mid]) {
if (key > array[mid]) {
min = mid + 1;
} else if (key < array[mid]) {
max = mid - 1;
}
mid = (min + max) / 2;
if (max < min) {
mid = -1;
break;
}
}
if (mid == -1) {
System.out.println("这个数不存在于数组中");
} else {
System.out.println("这个数在数组中的角标为:" + mid);
}
}
折半查找图解
二维数组
二维数组
二维数组是个容器保存相同数据类型的一维数组
二维数组声明方式:
数据类型[][] 数组名 = 初值;
声明方式一:
int[][] array = new int[长度][长度];
声明方式二:可以把数组中元素定义出来
int[][] array = new int[][] {{元素1, 元素2, 元素3, ..., 元素n},
{元素1, 元素2, 元素3, ..., 元素n},
{元素1, 元素2, 元素3, ..., 元素n},
{...},
{元素1, 元素2, 元素3, ..., 元素n}};
// 如何描述下面定义的二维数组
声明方式一:
// 该二维数组中有3个一维数组,每个一维数组中有4个元素
int[][] array = new int[3][4];
// 打印二维数组的长度相当于打印数组中有多少个元素(二维数组中的元素为一维数组,只不过一维数组中也包含元素)
System.out.println(array.length);
// 打印二维数组中第一个元素的长度相当于打印一维数组中有多少个元素
System.out.println(array[0].length);
声明方式二: 可以把数组中元素定义出来
int[][] array = new int[][] {
{1, 2, 3, 4, 5},
{2, 3, 4, 5, 6},
{3, 4, 5, 6, 7}
};
// 遍历数组
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
System.out.print(array[i][j] + "\t");
}
System.out.println();
}
多维数组
三维数组是容器保存多个相同类型的二维数组
....
int[][][] array1= new int[][][] {
{
{1, 2, 3, 4, 5},
{2, 3, 4, 5, 6},
},
{
{1, 2, 3, 4, 5},
{2, 3, 4, 5, 6},
},
{
{1, 2, 3, 4, 5},
{2, 3, 4, 5, 6},
},
};
int sum = 0;
for (int i = 0; i < array1.length; i++) {
for (int j = 0; j < array1[i].length; j++) {
for (int k = 0; k < array1[i][j].length; k++) {
sum = sum + array1[i][j][k];
System.out.print(array1[i][j][k] + "\t");
}
System.out.println();
}
System.out.println();
}
System.out.println(sum);
http://blog.csdn.net/huzongnan/article/list