数组初始化错误

时间:2012-07-28 14:41:22

标签: java

我正在从网站上进行java编程实践。我必须使用数组显示这个输出。

Enter the number of students: 3
Enter the grade for student 1: 55
Enter the grade for student 2: 108
Invalid grade, try again...
Enter the grade for student 2: 56
Enter the grade for student 3: 57
The average is 56.0

到目前为止,这是我的源代码,它引发了错误The local variable grades may not have been initialized。我该如何恢复?我必须使用数组制作这个程序。

package array;

import java.util.Scanner;

public class GradesAverage {

    public static void main(String[] args) {

        int numStudents = 0;
        int[] grades;

        Scanner in = new Scanner(System.in);

        System.out.print("Enter number of students : ");
        numStudents = Integer.parseInt(in.next());

          for (int i = 0; i < numStudents; i++) {
              System.out.print("Enter grade of student "+i+" :");
              grades[i] = Integer.parseInt(in.next());
        }

    }

}

5 个答案:

答案 0 :(得分:0)

写作时

int[] grades;

您声明了一个名为grades的变量,该变量可以包含int[]类型的值。但是,在使用它之前,您还必须初始化,例如创建实际的数据结构。这是这样做的:

int[] grades = new int[numStudents];

请注意,在声明array时需要事先知道大小,因此必须将数组的创建移到for循环之前。

答案 1 :(得分:0)

在读取方法中声明的所有变量之前,必须为它们分配一个值以避免垃圾值。

同样在java数组中是对象,这意味着您必须使用new创建一个数组实例,并将其分配到等级,然后才能在其中存储任何内容。

 grades = new int[numStudents];

答案 2 :(得分:0)

数组没有恒定的内存分配,因此必须为新数组分配内存。

例如

int[] grades = new int [numStudents]

这当然应该在你知道numStudents

的价值后才能写出来

答案 3 :(得分:0)

Keppil已经说过的内容并不多,但我想补充一点'为什么'。

你看,当创建int []成绩时,它只是一个“空指针”,指向内存中的随机位置。

通过指定'new int [numGrades]'的返回值,指针的值指向已分配的内存中的位置。此内存的大小为“整数大小乘以成绩数”,可以安全访问。

如果此数组的大小太小(或根本不存在),则通常会触发内存冲突异常,因为您正在编写无法访问的内存,这通常会导致程序崩溃或其他未定义的行为。

请记住:数组与普通变量不同。

所以是的,简而言之:

grades = new int [numGrades];是你在找什么。 直接在线下方,您正在解析输入的学生数。

作为补充建议:用户输入始终是错误的来源。 确保包含无效输出的错误处理。 (例如,如果某些明智的人决定输入'John Smith'而不是等级。

答案 4 :(得分:0)

您必须在使用之前初始化变量。

请参阅您的代码的正确版本之一:

package array;

import java.util.Scanner;

public class GradesAverage {

    public static void main(String[] args) {

        int numStudents = 0;
        int[] grades;

        Scanner in = new Scanner(System.in);

        System.out.print("Enter number of students : ");
        numStudents = in.nextInt();

        // this line was added
        grades = new int[numStudents];

        for (int i = 0; i < numStudents; i++) {
              System.out.print("Enter grade of student "+i+" :");
              grades[i] = Integer.parseInt(in.next());
        }

        // closing used resources is a good practice
        in.close();
    }

}