数组定义:能够保存一组数据
特点:1.数据必须同类型;2.固定长度;
***
### 数组定义方式:
~~~
public class ArrayDemo1 {
public static void main(String[] args) {
// 数组:一个容器,能够放一组数据
// 特点(缺点):1.必须是同类型;2.固定长度
// 声明方法1:数组类型 数组名[] = new 数组类型[长度];数组类型[] 数组名 = new 数组类型[长度];
int arr1[] = new int[5];// 默认保存了5个0
// String str[] = new String[5];// 默认保存了5个null
// boolean b[] = new boolean[5];// 默认保存了5个false
// 通过下标值去访问数组元素:长度为n的数组,下标值范围0-->n-1
arr1[0] = 120;
arr1[1] = 121;
arr1[2] = 122;
arr1[3] = 123;
arr1[4] = 124;
// arr1[5] = 125;// 数组越界
// System.out.println(arr1[0]);
// 声明方法2:数组类型 数组名[] = new 数组类型[]{元素1,元素2,....};
int arr2[] = new int[] {120,121,122,123,124};
System.out.println(arr2[3]);
// 声明方法3:数组类型 数组名[] = {元素1,元素2,....};
int arr3[] = {120,121,122,123,124,125};
// 数组的length属性
System.out.println(arr3.length);
// 字符串的length()方法
System.out.println("hello".length());
}
}
~~~
### 数组常见操作--遍历
~~~
public class ArrayDemo2 {
public static void main(String[] args) {
// 数组的遍历(取到数组中每一个元素)
// length遍历次数-->数组名[下标]
int arr[] = {5,7,23,98,111,13,77};
// 遍历方法1:
// for(int i = 0;i < arr.length;i++) {
// int num = arr[i];
// System.out.println(num);
// }
// 遍历方法2:增强for循环
for(int num:arr) {
System.out.println(num);
}
String str[] = {"ab","cd","ef","g"};
for(String s:str) {
System.out.println(s);
}
}
}
~~~
### 一维数组内存模型
![](https://box.kancloud.cn/33f0c8426c3f658e45ab283d25a2c81f_688x419.png)
### 二维数组内存模型
![](https://box.kancloud.cn/100f7b53ee174fb0380fecdc282dfaad_691x419.png)
### 二维数组的定义及遍历
~~~
public class ManyArrayDemo1 {
public static void main(String[] args) {
// 二维数组
// int arr1[][] = {{1,2,3},{4},{5,6,7,8}};
// System.out.println(arr1.length);// 5
// 第二种声明方式
// int[][] arr2 = new int[3][];
// arr2[0] = new int[]{1,2,3};
// arr2[1] = new int[]{4,5,6};
// arr2[2] = new int[]{7,8,9,10,11,12};
// 二维数组的访问
// System.out.println(arr2[2][2]);
// 二维数组遍历
// for(int i = 0;i < arr1.length;i++) {
// for(int j = 0;j < arr1[i].length;j++) {
// System.out.print(arr1[i][j]+" ");
// }
// System.out.println();
// }
}
}
~~~
### 排序(冒泡,选择)
~~~
public class ArrayDemo4 {
public static void main(String[] args) {
// 1.冒泡排序
// int[] arr={6,3,8,2,9,1};
// for(int i = 0;i < arr.length - 1;i++) {
// for(int j = 0;j < arr.length - i - 1;j++) {
// if(arr[j] < arr[j+1]) {
// int temp;
// temp = arr[j];
// arr[j] = arr[j+1];
// arr[j+1] = temp;
// }
// }
// }
// for(int num:arr) {
// System.out.println(num);
// }
// 2.选择排序
int[] arr={6,3,8,2,9,1};
// 1-1 3,6,8,2,9,1 1-2 3,6,8,2,9,1 1-3 2,6,8,3,9,1 1-4 2,6,8,3,9,1 1-5 1,6,8,3,9,2
// 2-1 1,6,8,3,9,2 2-2 1,3,8,6,9,2 2-3 1,3,8,6,9,2 2-4 1,2,8,6,9,3
for(int i = 0;i < arr.length - 1;i++) {
for(int j = i + 1;j < arr.length;j++) {
if(arr[i] > arr[j]) {
int temp;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
for (int num : arr) {
System.out.println(num);
}
}
}
~~~
### 快速排序及数组拷贝
~~~
public class ArrayDemo5 {
public static void main(String[] args) {
int arr[] = {7,5,3,2,1,9,10};
Arrays.sort(arr);// 快速排序--升序
for(int num:arr) {
System.out.println(num);
}
}
}
~~~
~~~
public class ArrayCopyDemo1 {
public static void main(String[] args) {
// 数组的复制
int source[] = {1,2,3,4,5,6};
int dest[] = {7,8,9,10,11,12,13,14,15};
/*
* source:源数组
* srcPos:源数组中的起始位置
* dest:目标数组
* destPos:目标数组中的起始位置
* length:要复制的数组元素的个数
*/
System.arraycopy(source, 1, dest, 3, 3);
for(int num:dest) {
System.out.print(num+" ");
}
}
}
~~~
***
### 课外习题
1.模拟35选7
~~~
public class Practice5 {
public static void main(String[] args) {
// 模拟35选7(没有循环嵌套)
boolean bool[] = new boolean[35];// 35个false
for(int i = 0;i < 7;i++) {
// 生成一个随机数
int random = (int)(Math.random()*35+1);// 5
if(bool[random-1]) {
i--;
continue;
}
bool[random-1] = true;
}
// for(boolean b:bool) {
// System.out.print(b+" ");
// }
for(int i = 0;i < bool.length;i++) {
if(bool[i]) {
System.out.println(i+1);
}
}
}
}
~~~
2.编写一个简单程序,要求数组长度为5,分别 赋值10,20,30,40,50,在控制台输出该数组的值。
~~~
public class HomeWork1 {
public static void main(String[] args) {
// 1、编写一个简单程序,要求数组长度为5,分别赋值10,20,30,40,50,在控制台输出该数组的值。
int arr[] = {10,20,30,40,50};
for(int num:arr) {
System.out.println(num);
}
}
}
~~~
3.给定一个有9个整数(1,6,2,3,9,4,5,7,8)的数组 ,先排序,然后输出排序后的数组的值。
~~~
public class HomeWork3 {
public static void main(String[] args) {
// 3、给定一个有9个整数(1,6,2,3,9,4,5,7,8)的数组,先排序,然后输出排序后的数组的值。
int arr[] = {1,6,2,3,9,4,5,7,8};
for(int i = 0;i < arr.length - 1;i++) {
for(int j = i + 1;j < arr.length;j++) {
if(arr[i] < arr[j]) {
int temp;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
for(int num:arr) {
System.out.println(num);
}
}
}
~~~
4.在控制台上输入一个正整数,代表数组长度,然后向数组中输入每一个元素,然后在控制台上遍历出来。
~~~
public class Practice8 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入要输入几个数字:");
int num = scan.nextInt();
int arr[] = new int[num];
int index = 0;
for(int i = 0;i < num;i++) {
System.out.println("请输入第"+(i+1)+"个数字");
arr[index] = scan.nextInt();
index++;
}
for(int n:arr) {
System.out.print(n+" ");
}
}
}
~~~
5.利用数组完成此题:控制台输入一年当中的第几月多少号,输出这天是这一年的多少天。
~~~
public class Practice9 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("year:");
int year = scan.nextInt();
System.out.println("month:");
int month = scan.nextInt();
System.out.println("date:");
int date = scan.nextInt();
int feb = 28;
// 闰年29天
if(year%4==0 && year%100!=0 || year%400==0) {
feb = 29;
}
int days[] = {31,feb,31,30,31,30,31,31,30,31,30,31};
int sum = 0;
for(int i = 0;i < month - 1;i++) {
sum = sum + days[i];
}
System.out.println("第"+(sum+date)+"天");
}
}
~~~
6.随机生成100个1到10的随机数,计算这些数字出现的概率。
~~~
public class Test {
public static void main(String[] args) {
int arr[] = new int[10];
for(int i = 0;i < 100;i++){
int random = (int)(Math.random()*6)+1;
arr[random-1]++;
}
for(int i = 0;i < arr.length;i++){
System.out.println(i+1+"出现的概率是"+arr[i]+"%");
}
}
}
~~~
***
#### 总结:
1.一维,二维数组的定义及遍历;
2.对数组排序(循环嵌套);