2D数组数据是否为空?

时间:2016-10-14 14:40:15

标签: java arrays for-loop multidimensional-array

我创建了一个接受用户输入的程序,并将存储在2d数组中。例子情况,用户输入semester = 2的输入;那么当然也不是= 2;我的循环工作正常,但数据存储不好。

输出: 空值 空值 空值 输入4

它应该是这样的: 输入1 输入2 输入3 input4

这是我的代码:

BufferedReader inData = new BufferedReader(new InputStreamReader(System.in));

    try {

        System.out.print("Enter no of semester : ");
        data = inData.readLine();
        noSem = Integer.parseInt(data);

        // Semester loop
        for(int i = 0; i < noSem; i++) {

            System.out.println("\n\tSemester" + (i + 1));
            System.out.print("Enter number of course : ");
            data = inData.readLine();
            noCourse = Integer.parseInt(data);

            // course details loop
            for(int u = 0; u < noCourse; u++) {

                System.out.println("Enter Course Code : ");
                System.out.print("Enter Course Name : ");
                sbjName = new String[noSem][noCourse];
                sbjName[i][u] = inData.readLine();

                System.out.println("Enter Credit Hour : ");
                System.out.println("Enter Marks : ");
                System.out.println("\n");

            }
        }

        for(int x = 0; x < noSem; x++) {
            for(int y = 0; y < noCourse; y++) {
                System.out.println(sbjName[x][y]);
            }
        }
    }

3 个答案:

答案 0 :(得分:2)

BufferedReader inData = new BufferedReader(new InputStreamReader(System.in));

try {
    System.out.print("Enter no of semester : ");

    int noSem = Integer.parseInt(inData.readLine());
    String[][] sbjName = new String[noSem][];

    // Semester loop
    for (int i = 0; i < noSem; i++) {
        System.out.println("\n\tSemester" + (i + 1));
        System.out.print("Enter number of course : ");

        int noCourse = Integer.parseInt(inData.readLine());
        sbjName[i] = new String[noCourse];

        // course details loop
        for (int u = 0; u < noCourse; u++) {
            System.out.println("Enter Course Code : ");
            System.out.print("Enter Course Name : ");
            sbjName[i][u] = inData.readLine();

            System.out.println("Enter Credit Hour : ");
            System.out.println("Enter Marks : ");
            System.out.println("\n");
        }
    }

    for (int x = 0; x < sbjName.length; x++) {
        for (int y = 0; y < sbjName[x].length; y++) {
            System.out.println(sbjName[x][y]);
        }
    }
}

答案 1 :(得分:1)

你的问题在这里:

sbjName = new String[noSem][noCourse];

该语句在每次迭代期间创建一个 new 数组。换句话说:你丢弃了之前创建的数组;因此,您先前存储在这些阵列中的任何信息......都会被丢弃!

您只想一次;所以你将它移动到你的循环之外

答案 2 :(得分:0)

问题似乎是每次进行第一次for循环时都要重新创建2d数组。

要解决此问题,您需要在开头定义可用课程的数量:

TheDates    Records
--------------------
2016-09-23    120
2016-09-30    157
...etc