1.什么是数组?
数组是一种特殊的类型,数组的"地址"是首地址,他的值也是首地址。虽然值相同但是类型是不同的。
1.1如何定义一个数组
/** * * @author sadfoo @date 2018年8月31日 * @tips:数组申明、遍历 */ public class TestArray { public static void main(String[] args) { // 数组申明或者定义有2种方式: // 数组申明 String[] names; // 第一种:静态初始化,初始化数组与给元素赋值同时进行 names = new String[] { "数组001", "数组002", "数组003" }; // 数组申明 int score[]; // 第二种:动态初始化,初始化数组与给元素赋值分开进行 score = new int[4]; // 通过数组元素下角标调用,数组从0开始,n-1结束(n表示数组的长度) score[0] = 87; score[1] = 88; score[3] = 99; // 数组的长度,通过数组的length属性来调用 System.out.println("names的分配空间长度为:" + names.length); System.out.println("score的分配空间长度为:" + score.length); // 如何遍历数组元素 // NO1:直接打印脚标遍历(累赘) System.out.println("我是names第一种数组遍历方式 :"); System.out.println(names[0]); System.out.println(names[1]); System.out.println(names[2]); System.out.println("我是score第一种数组遍历方式 :"); System.out.println(score[0]); System.out.println(score[1]); System.out.println(score[3]); // NO2:循环方法遍历(优选) System.out.println("我是names第二种数组遍历方式 :"); for (int i = 0; i < names.length; i++) { System.out.println(names[i]); } System.out.println("我是score第二种数组遍历方式 :"); for (int i = 0; i < score.length; i++) { System.out.println(score[i]); } } }
遇到问题:数组下标越界异常
1.2默认初始化值
// 对于基本数据类型:byte、short、int、long而言,初始默认值为:0 byte[] bt = new byte[6]; // 假设赋一个值 bt[0] = 90; bt[5] = 99; for (int i = 0; i < bt.length; i++) { System.out.println("byte默认值为:" + bt[i]); } // 对于基本数据类型:float、double而言,初始默认值为:0.0 float[] ft = new float[7]; // 假设赋二个值 ft[1] = 12f; ft[3] = 12f; for (int i = 0; i < ft.length; i++) { System.out.println("float默认值为:" + ft[i]); } // 对于基本数据类型:char而言,初始默认值为:空格 char[] cr = new char[8]; for (int i = 0; i < cr.length; i++) { System.out.println("char默认值为:" + cr[i]); } // 对于基本数据类型:boolean而言,初始默认值为:false boolean[] bl = new boolean[9]; for (int i = 0; i < bl.length; i++) { System.out.println("boolean默认值为:" + bl[i]); } // 对于引用类型的变量构成的数据而言,初始默认值为:null // 数组申明 String[] sr = new String[10]; sr[0] = "AA"; sr[1] = "BB"; sr[3] = "DD"; for (int i = 0; i < sr.length; i++) { System.out.println("引用类型默认值为:" + sr[i]); }
1.3数组练习题
import java.util.Scanner; /** * * @author sadfoo @date 2018年9月1日 * @tips:练习一维数组的使用 */ public class TestStudentScore { @SuppressWarnings("resource") public static void main(String[] args) { /** * 从键盘读入学生成绩,找出最高分,并输出学生成绩等级, 成绩>=最高分-10:等级为'A' ,成绩>=最高分-20:等级为'B', * 成绩>=最高分-30:等级为'C' ,其余:等级为D */ // 创建scanner对象,并从键盘获取学生的个数n Scanner sc = new Scanner(System.in); System.out.println("请输入学生的个数:"); int count = sc.nextInt();// count用来记录学生的个数 // 根据输入的学生个数n,创建一个长度为n的int型数组 int[] scores = new int[count]; int maxScore = 0; // 依次从键盘获取n个学生的成绩,并赋给相应的数组元素,并获取n个学生的最高分 System.out.println("请依次输入"+count+"个学生的成绩:"); for (int i = 0; i < scores.length; i++) { int score = sc.nextInt();// 依次从键盘获取学生的成绩 scores[i] = score; if (scores[i] > maxScore) { maxScore = scores[i]; } } // 遍历学生成绩的数组,并根据学生成绩最高分的差值赋予相应的等级并输出 System.out.println("最高分值为:" + maxScore); for (int i = 0; i < scores.length; i++) { char level; if (scores[i] > maxScore - 10) { level = 'A'; } else if (scores[i] > maxScore - 20) { level = 'B'; } else if (scores[i] > maxScore - 30) { level = 'C'; } else { level = 'D'; } System.out.println("student " + i + ",score is " + scores[i] + ",grade is " + level); } } }
/** * * @author sadfoo @date 2018年9月1日 * @tips:求一个二维数组里所有数之和 */ public class TestGetSum { public static void main(String[] args) { // 创建一个二维数组并赋值(根据情况采用静态还是动态赋值) int[][] m = new int[][] { { 1, 2, 3 }, { 4, 5 }, { 6 } }; // 创建sum记录总和 int sum = 0; //遍历数组 for (int i = 0; i < m.length; i++) { for (int j = 0; j < m[i].length; j++) { System.out.println(m[i][j] + " "); sum += m[i][j]; } System.out.println(); } System.out.println("所有二维数组的和值尾:"+sum); } }