0

我正在从网站上进行 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());
        }

    }

}
4

5 回答 5

0

当你写

int[] grades;

你声明了一个名为 的变量grades,它可以保存一个类型的值int[]。然而,在您使用它之前,您还必须对其进行初始化,例如创建实际的数据结构。这样做是这样的:

int[] grades = new int[numStudents];

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

于 2012-07-28T14:43:39.247 回答
0

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

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

 grades = new int[numStudents];
于 2012-07-28T14:46:34.437 回答
0

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

例如

int[] grades = new int [numStudents]

这当然应该在你知道 numStudents 的值之后才写

于 2012-07-28T14:48:32.367 回答
0

Keppil 已经说过的话并没有什么要补充的,但我想补充一点“为什么”。

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

通过赋值'new int[numGrades]'的返回值,指针的值指向内存中已经赋值的位置。该内存的确切大小为“整数大小乘以等级数”,并且可以安全访问。

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

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

所以,是的,简而言之:

成绩=新的int [numGrades];就是你要找的。直线下方,您正在解析输入的学生人数。

作为附加建议:用户输入始终是错误的来源。确保包含无效输出的错误处理。(例如,如果某个聪明人决定输入“John Smith”而不是成绩。

于 2012-07-28T14:49:43.270 回答
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();
    }

}
于 2012-07-28T15:03:40.433 回答