foreach循环
- 自动遍历数组和集合的每个元素。
- 格式: for(类型 变量名 : 数组名 | 集合名){ //变量自动迭代访问每个元素... }
public class TestForEach{ public static void main(String[] args){ String[] names = {"Georgianna","Jen","Simon"}; for (String name : names){ System.out.println(name); } } }
-
使用 foreach 循环遍历数组元素无须获得数组长度,也无须根据索引来访问数组元素。
-
无须循环条件,无须循环迭代语句,这些部分都由系统来完成。
-
当使用 foreach 循环时,通常不要对循环变量进行赋值,虽然没有语法错,但极容易引起错误。
如果希望改变数组元素的值,则不能使用这种foreach循环。public class TestForEach{ public static void main(String[] args){ String[] names = {"Georgianna","Jen","Simon"}; for (String name : names){ name="Tom";//错误 System.out.println(name); } } }
多维数组
多维数组可以理解为由若干低维数组组成的数组,例如,多个一维数组可以组合而成为“二维数组”,多个二维数组组成三维数组…
二维数组:
- 这5个一维数组的长度,即数组s的第二维的长度为3 。i和j:高维低维,行号列号
二维数组结构 s[i][j] j=0 j=1 j=2 i=0 23 45 33 i=1 12 65 44 i=2 43 87 76 i=3 21 34 87 i=4 54 09 55 - 声明:类型名 变量名[][]; 或 类型名[][] 变量名; 例如,int[][] s; Student s[][]; 声明完不可以使用
- 对象的创建和初始化:
- 静态初始化
- 格式:类型[][] 数组名={{第0行初值},…,{第n-1行初值}};
- 例如,int[][] s={{67,89,53},{77,98,68},{57,66,73},{80,88,94},{84,92,90}};
- 动态初始化
- 直接为每一维分配空间
例如,int [][] s=new int[5][3]; -
从最高维开始(必须从最高维开始),分别为每一维分配空间。
例如,int[][] s=new int[5][]; s[0]=new int [3]; s[1]=new int [3]; …s[0][0]=67; -
s[0] = new int[]{123}
- 直接为每一维分配空间
- 静态初始化
-
每行的元素个数不同,即每行的列数可以不同。
例如,int[][] s=new int[3][]; s[0]=new int[1]; s[1]=new int[2]; s[2]=new int[3]; -
length属性
-
可获得二维数组高维的大小,即行数;使用s[i].length属性可获得二维数组每一行的列数。
for(int i=0;i<s.length;i++){ for(int j=0;j<s[i].length;j++) sum+=s[i][j]; }
-
public class TestArray{
public static void main(String[] args){
int[][] b = {{11},{21,22},{31,32,33}};
int[][] c = new int[2][3];
c[0][0] = 1;
c[0][1] = 2;
c[0][2] = 3;
display(b);
System.out.println(------);
display(c);
}
public static void display(int[][] s){
for(int i=0;i<s.length;i++){
for(int j=0;j<s[i].length;j++){
System.out.print(s[i][j]+"\t");
}
System.out.print();
}
}
}
11
21 22 23
31 32 33
------------------------
1 2 3
0 0 0
数组排序
- 原型:public static void sort(<type>[] a); 例如,int[] a={4,12,0,-5,45,-56}; Arrays.sort(a);
important java.util.Arrays; public class TestArraySort{ public static void main(String[] args){ int[][] a = {4,12,5,0,-5,43}; System.out.println("排序前:"); displayInt(a); Arrays.sort(a); System.out.println("排序后:"); displayInt(a); String[] name = {"Tom","Kitty","Jerry","葫芦娃"}; System.out.println("排序前:"); displayString(name); Arrays.sort(name); System.out.println("排序后:"); displayString(name); } public static void displayInt(int[][] s){ for(int i:s){ System.out.print(i+"\t"); } } public static void displayString(int[][] s){ for(int j:s){ System.out.print(j+"\t"); } } }
1.编写程序,从键盘输入12个月中每个月的降雨量,计算月平均降雨量,月降雨量和月平均降雨量的偏差,并将结果输出。import java.util.Scanner; class Ruin { public void system(){ Scanner scanner = new Scanner(System.in); double[] ary = new double[12]; double sum = 0; for(int i = 0; i < ary.length; i++){ System.out.print("请输入降雨量(" + (i+1) + "月): "); ary[i] = scanner.nextDouble(); sum += ary[i]; } double average = sum / ary.length; System.out.println("平均值是 " + average); for(int i = 0; i < ary.length; i++){ System.out.print("每个月值差(" + (i+1) + "月): "); double cha = ary[i]-average; System.out.println("平均值是 " + cha); } } } class RuinTest { public static void main(String[] args) { Ruin r = new Ruin(); r.system(); } }
2.假定5个学生参加了三门课的考试,试统计出全部学生的最高分和最低分,以及每个学生的平均成绩,并输出。class Student { public void test(double[][] a) { double min=a[0][0]; double max=a[0][0]; for(int i=0;i<a.length;i++) { for(int j=0; j<a[i].length; j++){ if(min>a[i][j]) min = a[i][j]; if(max<a[i][j]) max = a[i][j]; } } System.out.println("所有人最低分:" + min); System.out.println("所有人最高分:" + max); } public void average(double[][] a){ for(int i=0; i<a.length; i++){ double sum = 0; for(int j=0; j<a[i].length; j++){ sum += a[i][j] ; } double ave=0; ave = sum/a[i].length ; System.out.println("第"+(i+1)+"个学生的平均成绩是" + ave); } } } class StudentTest{ public static void main(String[] args){ Student s = new Student(); double[][] i= {{90,89.76},{78,98,56},{76,89,87},{98,87,90},{78,87,69}}; s.test(i); s.average(i); } }