10、数组、二维数组
一、回顾
1、数组中只能存取相同数据类型的数据
2、数组长度一旦确定,是不能修改的
3、数组中的下标是从0开始的,逐一递增。逐一数组下标越界的问题
4、数组的使用:
先创建,再赋值
变创建边赋值
5、数组只是起到了我们程序员好起名字,并且使用方便的功能,存储空间和单个的变量一样
二、java程序中的错误
1、编译时错误:
语法错误,编译无法通过,会直接报错。可以直接看到的ide集成开发环境会直接给出提示信息
2、运行时错误:
符合语法规范,编译可以通过,因为逻辑错误,运行时直接报错
三、一维数组、二维数组、、、地理信息系统可能需要用到三维数组
1、例子:有5个班,每班5名学生,以班为单位统计所有学生的成绩
//一维数组 // int[] array1 = {100,98,66,95,91}; // int[] array2 = {100,98,66,95,91}; // int[] array3 = {100,98,66,95,91}; // int[] array4 = {100,98,66,95,91}; // int[] array5 = {100,98,66,95,91}; //二维数组 int[][] array = {{100,98,66,95,91},{100,98,66,95,91},{100,98,66,95,91},{100,98,66,95,91},{100,98,66,95,91}};
2、基本语法
数据类型[][] 数组名;
数据类型 数组名[][];
3、使用:
声明
分配内存空间
赋值
使用
// 声明 // int[][] array; //// 分配内存空间:第一个方框是必须写的(是第一个维度),第二个可以不写(属于第二个维度);另外,第二个可以不同 //// array = new int[5][]; // array = new int[3][5]; //// 赋值 // array[0][0] = 90; // //// 使用 // System.out.println(array[0][0]); //边创建边赋值 // int[][] array = {{1,2},{2,5}}; // 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(); // }
4、java的内存模型
栈内存:
堆内存:
基本数据类型:8种:boolean byte char short int ling float double(存放在占内存中);
引用数据类型:存放在栈内存和堆内存中;通过new关键字创建的变量;
int num =10;
String str = new String("java");//等号左边的都是在栈内存中的;堆内存中存放java;占内存中的值是堆内存中的地址
String str2 = "java";//在栈和字符串常量池中
综上:能用基本数据类型解决的,用基本数据类型解决,否则是String,最后是对象
1、java中的变量都是保存在栈内存中
2、如果是基本数据类型,栈内存中保存的就是数值;
如果是引用数据类型,栈内存存储的是堆内存中的地址,通过内存地址引用堆内存中的数据
5、上一个例子的完整代码
/** * 例子:有5个班,每班3名学生,以班为单位统计所有学生的成绩 */ int[][] array = new int[5][3]; int sum = 0; Scanner s = new Scanner(System.in); for(int i=0;i<array.length;i++) { sum = 0;//清空很重要 System.out.println("请输入第"+(i+1)+"个班的学生成绩:"); for (int j = 0; j < array[i].length; j++) { System.out.println("请输入第"+(j+1)+"个同学的成绩:"); array[i][j] = s.nextInt(); sum += array[i][j]; } System.out.println("第"+(i+1)+"班的总成绩是:"+sum); }