话不多说,代码伺候
m = [[0]*5]*3 #创建一个3行5列的二维数组 m[1][2]=1 print(m)
输出结果为:
分析:
m = [[0]*5]*3只是指向三个空列表的引用。
创建一个二维数组的正确方法是:
m = [[0]*5 for i in range(3)] #创建一个3行5列的二维数组
今天练习的时候遇到一个题目,题目需求是这样的:
需求说明:
根据3个班各5名学生某门课程的成绩,正确使用二维数组计算如图所示3个班各自的总成绩
分析:
要实现这个功能需要存储两个信息:
- 一个是班级信息,一个是学生成绩信息,对于入门选手,首先肯定会想到用二维数组,二维数组的实质其实就是一个一维数组,只不过数组里面存的是其他数组的首地址,通过引用指向其他数组。
- 需要注意的是,学生成绩需要用户手动输入,这需要使用到Java的Scanner类,通过该类的对象调用nextInt()(接收整型数据),next()(接收字符串类型),具体用法如下:
import java.util.Scanner;//导入类 Scanner sc=new Scanner(System.in);//实例化Scanner对象 int studentScore=sc.nextInt();//接收用户输入的Int型数据
只需要用到两个for循环进行嵌套,用户依次输入数据存入数组;
下面是具体的代码:
import java.util.Scanner; public class Test08 { public static void main(String[] args) { int[][] scores=new int[3][5]; Scanner sc=new Scanner(System.in); int sum=0; for (int i = 0; i <scores.length ; i++) { System.out.println("********第"+(i+1)+"个班********"); for(int j=0;j<scores[i].length;j++){ System.out.print("请输入第"+(j+1)+"个同学的成绩:"); int studentScore=sc.nextInt(); scores[i][j]=studentScore; } } System.out.println("********成绩统计********"); for (int i = 0; i <scores.length ; i++) { for(int j=0;j<scores[i].length;j++){ sum+=scores[i][j]; } System.out.print((i+1)+"班总成绩:"+sum); System.out.println(); sum=0; } } }
下面是运行结果截图:
********第1个班******** 请输入第1个同学的成绩:50 请输入第2个同学的成绩:60 请输入第3个同学的成绩:70 请输入第4个同学的成绩:80 请输入第5个同学的成绩:90 ********第2个班******** 请输入第1个同学的成绩:10 请输入第2个同学的成绩:20 请输入第3个同学的成绩:30 请输入第4个同学的成绩:40 请输入第5个同学的成绩:50 ********第3个班******** 请输入第1个同学的成绩:20 请输入第2个同学的成绩:30 请输入第3个同学的成绩:40 请输入第4个同学的成绩:50 请输入第5个同学的成绩:60 ********成绩统计******** 1班总成绩:350 2班总成绩:150 3班总成绩:200 Process finished with exit code 0
本人小白一个,尚在努力学习中,想交流学习心得、看更多每日学习小文章,可关注我的微信公众号【Java菜鸟的进阶之路】一起交流成长!
文章链接:
Java中关于二维数组的理解与使用mp.weixin.qq.com
因为python中没有数组,所以一般用列表来实现二维数组。
都知道Python中有深拷贝和浅拷贝的问题,所以在初始化二位数组的时候可能不小心就会遇到这样的问题,比如:
arr = [[0] * 3] * 4
或者
a = [[]]*4
这样的问题在于其实*4只是复制了n个[0,0,0]或者[]的引用,改任何一个数组都会让另外3个发生改变。
那么正确的初始化方法:(避免发生浅拷贝)
(1)直接创建
arr = [[0,0,0], [0,0,0], [0,0,0], ]
(2)列表生成器创建
arr = [([0] * 4) for i in range(5)] #初始化为0
(3)numpy创建
import numpy as np arr = np.zeros((3, 4), dtype=np.int)
话不多说,代码伺候
m = [[0]*5]*3 #创建一个3行5列的二维数组 m[1][2]=1 print(m)
输出结果为:
分析:
m = [[0]*5]*3只是指向三个空列表的引用。
创建一个二维数组的正确方法是:
m = [[0]*5 for i in range(3)] #创建一个3行5列的二维数组
1.如何理解二维数组?
//一维数组
int[] arr = new int[]{1,2,3};
//静态初始化
int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}};
//动态初始化1
String[][] arr2 = new String[3][2];
//动态初始化2
String[][] arr3 = new String[3][];
//也是正确的写法:
int[] arr4[] = new int[][]{{1,2,3},{4,5,9,10},{6,7,8}};
int[] arr5[] = {{1,2,3},{4,5},{6,7,8}};//类型推断
//String[][] arr4 = new String[][4];
//String[4][3] arr5 = new String[][];
//int[][] arr6 = new int[4][3]{{1,2,3},{4,5},{6,7,8}};
System.out.println(arr1[0][1]);//2
System.out.println(arr2[1][1]);//null
arr3[1] = new String[4];
System.out.println(arr3[1][0]);
System.out.println(arr3[0]);//
System.out.println(arr4.length);//3
System.out.println(arr4[0].length);//3
System.out.println(arr4[1].length);//4
for(int i = 0;i < arr4.length;i++){
for(int j = 0;j < arr4[i].length;j++){
System.out.print(arr4[i][j] + " ");
}
System.out.println();
}
int[][] arr = new int[4][3];
外层元素:arr[0],arr[1]等
内层元素:arr[0][0],arr[1][2]等
针对于初始化方式一:比如:int[][] arr = new int[4][3];
外层元素的初始化值为:地址值
内层元素的初始化值为:与一维数组初始化情况相同
针对于初始化方式二:比如:int[][] arr = new int[4][];
外层元素的初始化值为:null
内层元素的初始化值为:不能调用,否则报错。