0

我正在尝试编写一个将作为输入的Java程序:

  • 学生人数
  • 每个学生修读的课程数量

然后它将计算每个学生的平均值。

但是我在尝试读取值时遇到了麻烦。请让我知道我能做些什么来解决这个问题。

我的代码是:

package q3;

import java.util.Scanner;
public class Q3 {

    public static void main(String[] args) {

        int [][] students;
        System.out.println("How many students? : ");
        Scanner in = new Scanner(System.in);
        int num = in.nextInt();
        students = new int[num][];
        int [] numofcourses = new int[num];

        for(int i = 0;i<num;i++)
        {
            System.out.print("How many courses for student " + (i+1) + " : ");
            numofcourses[i] = in.nextInt();
            for(int j = 0;j<numofcourses[i];j++)
            {
                System.out.print("Enter grade " + (j+1) + " for student " + (i+1) + " : ");         
                students[i][j] = in.nextInt();
            }
        }
    }

}
4

1 回答 1

1

基本上你的问题在于这条线

students = new int[num][];

students[i][j] = in.nextInt();

这个。因为在 java 数组中,您需要在使用数组之前对其进行初始化。但是在您的第一行中,您没有放置正确大小的数组,这意味着将无法正确定义二维数组。因此,一旦您尝试使用我在这里提到的第二个语句来调用它,它显然是空的。

所以你的想法应该是把动态值作为课程数量。但是就像在java中一样,你应该在使用它之前定义数组的大小。因此,在您的情况下,您的想法应该是将另一个数组作为课程放入您的基本数组(学生)中,这将是一个 int 数组,然后您可以使用它插入课程。

所以最好一起去

Object[][] data = new Object[numberOfStudents][1];

for 循环

numOFSubjects = nextInt();
int[] no_of_sub = new int[numOFSubjects];

然后

data[i][0] = no_of_sub ;

然后为 i 和 j 的循环应用等级

data[i][0][j] = nextInt();

完成了,我想你明白了。对不起虚拟代码。我认为它几乎在那里。

于 2015-03-06T16:07:02.577 回答