Java простой рваный запрос массива
Я пытаюсь написать программу на 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();
}
}
}
}
1 ответ
В основном ваша проблема с этой линией
students = new int[num][];
а также
students[i][j] = in.nextInt();
этот. потому что в Java-массивах вам нужно инициализировать массив, прежде чем использовать его. но в первой строке вы не указали правильный размер массива, а это означает, что 2D-массив не будет определен правильно. поэтому, как только вы попытаетесь вызвать его, используя второе утверждение, которое я упомянул здесь, оно, очевидно, будет нулевым.
поэтому ваша идея должна представлять динамические значения в виде числа курсов. Но, как и в Java, вы должны определить размер массива, прежде чем использовать его. поэтому в вашем случае ваша идея должна состоять в том, чтобы поместить другой массив в ваш базовый массив (студентов) в качестве курсов, и это будет массив int, а затем вы можете использовать его для вставки курсов.
так лучше идти с
Object[][] data = new Object[numberOfStudents][1];
для цикла
numOFSubjects = nextInt();
int[] no_of_sub = new int[numOFSubjects];
затем
data[i][0] = no_of_sub ;
затем применить оценки для цикла для I и J
data[i][0][j] = nextInt();
сделано, я думаю, у тебя есть идея. извините за фиктивный код. Я думаю, что это почти там.