复习要点
1.数组
1.1声明语法及特点
提示:只能保存一种数据类型,长度固定
提示:数组是引用数据类型,栈内存中保存的是指向堆区的地址,地址上保存着每个元素
// 声明
int []arr = new int[5]; // 默认5个0
int arr[] = new int[5]; // 默认5个0
String str[] = new String[5];// 5个null
int arr[] = new int[]{1,2,3,4,5};// 直接指定元素
int arr[] = {5,4,3,2,1};// 直接指定元素
1.2如何访问数组元素
// 数组的访问需要通过索引(下标)访问,长度为n的数组,下标范围为0-4
int arr[] = {5,4,3,2,1};
System.out.println(arr[0]); // 5
System.out.println(arr[3]); // 2
1.3遍历数组
遍历:逐个访问每个元素
// 例:在控制台打印数组中每个元素
int arr[] = {5,4,3,2,1};
// 1.推荐
for(int num : arr){
System.out.println(num);
}
// 2.原始
for(int i = 0;i < arr.length;i++){
System.out.println(arr[i]);
}
1.4二维数组
数组中存的还是数组
// 假如房子是一个数组,里面装着家具,房子里面还有房子,每个房子里面有自己的家具,这就是二维数组
int arr[][] = new int[5][]; // 保存了5个null
int []arr[] = new int[5][]; // 保存了5个null
int [][]arr = new int[5][]; // 保存了5个null
int arr[][] = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
int arr[][] = {{1,2,3},{4,5,6},{7,8,9}};
1.5二维数组的访问
int arr[][] = {{1,2,3},{4,5,6},{7,8,9}};
System.out.println(arr[0][0]);//1
System.out.println(arr[1][2]);//6
System.out.println(arr[2][1]);//8
1.6二维数组的遍历
int arr[][] = {{1,2,3},{4,5,6},{7,8,9}};
for(int i = 0;i < arr.length;i++){
for(int j = 0;j < arr[i].length;j++){
System.out.println(arr[i][j]);
}
}
注意:下标一旦越界,会抛出数组越界异常ArrayIndexOutOfBoundsException
1.7排序(重点,至少掌握一种)
public class Demo2 {
public static void main(String[] args) {
// 数组的排序
int arr[] = {12,1,55,7,89,32};
// 1.冒泡排序(必须)
// 外层循环--一共比较多少轮
// for(int i = 1;i < arr.length;i++) {
// // 每一轮比较的次数与第几轮和数组长度有关
// for(int j = 0;j < arr.length - i;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.print(num+" ");
// }
// 2.选择排序(非必须)
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.print(num+" ");
}
}
}
经典练习题
数组的定义及遍历
-
1.定义一个长度为5的int类型数组,分别赋值为7,8,2,3,5,并完成遍历在控制台打印
int []arr=new int[5]; arr[0]=7; arr[1]=8; arr[2]=2; arr[3]=3; arr[4]=5; for(int i=0;i<5;i++){ system.out.println(arr[i]); }
-
2.在控制台输入三个数组,分别代表年月日,计算这一天在这一年当中是第多少天
int a[]= {31,28,31,30,31,30,31,31,30,31,30,31};//平年 int b[]= {31,29,31,30,31,30,31,31,30,31,30,31};//闰年 Scanner scan=new Scanner(System.in); System.out.println("请输入年份"); int year=scan.nextInt(); System.out.println("请输入月份"); int month=scan.nextInt(); System.out.println("请输入日期"); int date=scan.nextInt(); int num=0; if((year%4==0&&year%100!=0) ||(year%100==0 && year%400==0)){ for(int i=0;i<month-1;i++) { num=num+b[i]; } System.out.println(year+"年"+month+"月"+date+"日是"+year+"年"+"的第"+(num+date)+"天"); }else { for(int i=0;i<month-1;i++) { num=num+a[i]; } System.out.println(year+"年"+month+"月"+date+"日是"+year+"年"+"的第"+(num+date)+"天"); }
-
3.int arr[] = {5,4,3,2,1};找出该数组的最大值,最小值,平均值
int arr[]= {5,4,3,2,1};
int max=arr[0];
int min=arr[0];
int sum=0;
for(int i=0;i<arr.length;i++) {
if(max<arr[i]) {
max=arr[i];
}
if(min>arr[i]) {
min=arr[i];
}
sum=sum+arr[i];
}
System.out.println("平均值是"+(sum/arr.length));
System.out.println("最大值是"+max);
System.out.println("最小值是"+min);
-
4.int arr[] = {53,14,73,20,-31};找出该数组的最大值及其下标
int a=0; int b=0; for(int i=0;i<arr.length;i++){ if(a<arr[i]){ a=arr[i]; b=i; } } System.out.println("最大值是"+a+","+"它的下标是"+b);
-
5.逆序输出.int arr[] = {5,4,3,2,1};中元素
for(int i=arr.length-1;i>=0;i--){ System.out.println(arr[i]); }
-
6.对int arr[] = {53,14,73,20,-31};整型数组降序排序
//选择排序 for(int i=0;i<arr.length-1;i++){ for(int j=i+1;j<arr.length;j++){ if(arr[i]<arr[j]){ int a=arr[i]; arr[i]=arr[j]; arr[j]=a; } } } //冒泡排序 for(int i=1;i<arr.length;i++) { for(int j=0;j<arr.length-i;j++) { if(arr[j]<arr[j+1]) { int a=arr[j]; arr[j]=arr[j+1]; arr[j+1]=a; } } }
-
7.对int arr[] = {53,14,73,20,-31,14,0,22,56};重复的元素清0
for(int i=0;i<arr.length;i++) { for(int j=i+1;j<arr.length;j++) { if(arr[i]==arr[j]) { arr[j]=0; } } }
-
8.模拟35选7,生成随机7个1-35之间的数字(注意:7个数字不能重复)
//第一种方法 boolean onOff=true; int arr[]=new int[7]; for(int i=0;i<7;i++) { // 判断循环是否产生了重复的数 onOff=true; int num=(int)Math.floor(Math.random()*34+1); for(int j=0;j<=i;j++) { // 判断循环是否产生了重复的数 if(arr[j]==num) { onOff=false; break; } } // 如果产生重复数就要重新产生 if(onOff) { arr[i]=num; }else { i--; } } //第二种方法 int arr[]=new int[7]; boolean b[]=new boolean[35]; for(int i=0;i<arr.length;i++) { int num=(int)Math.floor(Math.random()*34+1); if(!b[num-1]) { arr[i]=num; b[num-1]=true; }else { i--; } }
二维数组
-
①掌握二维数组的遍历
-
②求一个3x3矩阵对角线和
int arr[][] = { {1,2,3}, {4,5,6}, {7,8,9} }
int a=0; int b=0; for(int i=0;i<arr.length;i++) { a=a+arr[i][i]; b=b+arr[i][arr[i].length-1-i]; } System.out.println(a); System.out.println(b);
网友评论