• Geek_58b038
    2019-10-08
    我感觉多维数组这个概念很像一些学习计算机很伟大的“抽象”思想,像楼上说的一维数组是一个本子,二维数组可以将一堆本子堆起来,将一个本子抽象理解成一张纸,这样这一堆本子就是“一个本子了”,不知道这个理解对不对

    作者回复:
    就是这么个感觉。组合成一个复杂的东西,然后把这个复杂的东西当作一个整体,再去在更高的层面组合成更复杂的东西。

    就好像水泥钢筋和砖头,分别都是独立的单位,他们一起组成墙;然后把墙看成一个独立的单位,和别的单位一起,组成建筑;然后把建筑看成一个独立的单位,和花园,道路等等可以组成园区。

    
     1
  • 南风北风
    2020-01-06
    for (int i = 0; i <scores.length ; i++) {
                for (int j = 0; j <scores[i].length ; j++) {
                    scores[i][j]=100+Math.random()*20;
                }
            }
            System.out.println("请问你要查看第几年的成绩啊?");
            int year=in.nextInt()-1;
            if (year>yearToUse){
                System.out.println("对不起,你输入的年份超出保存的年限了,请重新输入");
            }
            System.out.println("请输入要查看的课程成绩编号");
            int scoreIndex=in.nextInt()-1;
            System.out.println("第"+(year+1)+"年的"+scoreNames[scoreIndex]+"成绩是"+scores[year][scoreIndex]);


    藏老师,如果要对之前的输入做校验,我加了之后,没有执行到,比如你保存了9年的成绩,但是输入查看哪一年的成绩时,比如我输入了第10年,这个明显数组越界了,但是我加的判断又没起作用?这个应该怎么对键盘上输入的内容做校验啊
    展开
    
    
  • 南风北风
    2020-01-06
    for (int i = 0; i <scores.length ; i++) {
                for (int j = 0; j <scores[i].length ; j++) {
                    scores[i][j]=100+Math.random()*20;
                }
            }
            System.out.println("请问你要查看第几年的成绩啊?");
            int year=in.nextInt()-1;
            if (year>yearToUse){
                System.out.println("对不起,你输入的年份超出保存的年限了,请重新输入");
            }
            System.out.println("请输入要查看的课程成绩编号");
            int scoreIndex=in.nextInt()-1;
            System.out.println("第"+(year+1)+"年的"+scoreNames[scoreIndex]+"成绩是"+scores[year][scoreIndex]);


    藏老师,如果要对之前的输入做校验,我加了之后,没有执行到,比如你保存了9年的成绩,但是输入查看哪一年的成绩时,比如我输入了第10年,这个明显数组越界了,但是我加的判断又没起作用?这个应该怎么对键盘上输入的内容做校验啊
    展开

    作者回复: 增加一个while true 的循环检查,输入不正确就不跳出循环。

        while(true){
            System.out.println("请问你要查看第几年的成绩啊?");
            int year=in.nextInt()-1;
            if (year>yearToUse){
                System.out.println("对不起,你输入的年份超出保存的年限了,请重新输入");
                continue;
            } else {
                 break;
            }
        }

     1
    
  • 鄧李
    2019-12-01
    老师我有个小问题,如何用矩阵求两个二位矩阵的乘积啊?

    作者回复:
    矩阵乘法用多位数组计算基本上就是直接套公式。一个二维数组天然就是一个矩阵,按照公式定义好结果矩阵(二维数组)的大小,然后对输入的两个矩阵嵌套循环,套公式计算,给结果矩阵对应的元素赋值就可以了。

    
    
  • Geek_421d56
    2019-10-24
    double[][] a = new double[3][5];
    按照老师之前的类比,一维数组是“二级跳”,二维数组就是“三级跳”了,即a的名是地址,a的实的每个存储单元也是地址,再通过这个地址,分别去找到每个一维数组的真正的实。值得注意的是,构成二维数组的每个一维数组内部的存储是连续的,比如a[0]标识的一段连续的存储单元用于存储a[0]中的元素;而各个一维数组的地址之间是没有关系的,所以a[2] = new double[100]可以将新申请的100个连续double的首地址赋值给a[2]。

    作者回复: 嗯呐,理解到位。

    补充一点就是a[0]作为a[][]的数组元素,它的地址(不是它存储的值,而是地址)和a[1]是连续的。这样就更好理解多位数组是一位维数组的延续。

    
    
  • Novichok
    2019-07-26
    用线性的内存结构,来表示多维的数据,很是巧妙,就是不太直观。抛开内存存储细节,我是这么理解多维数组。以老师斥巨资买的本子为例:一个本子,是一维数组;一摞本子,是二维数组;一箱本子摞起来,三维数组;几个放满箱子的房间,四维数组......

    作者回复: 拿得花不老少钱买本子,哈哈。理解了就好,理解数组了就算是程序员了。

    我最多只能操控到三维数组,再多脑子就转不过来了,得上辅助,比如用纸写写画画。对于Java语言善于解决得问题领域来说,其实很少会用到超过二维数组。否则很可能是设计上有问题。

    再多说一句,Java数组的事实就是,除了一维数组以外(当然一维数组也可以是引用),高维数组都是指向别的数组的引用,引用指向的是下一维度的数组实体,当然下一维度的数组可能也还非一维的,那么继续是引用,继续指向别的数组。

    
    
我们在线,来聊聊吧