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

Keppilがすでに言ったことに追加することはあまりありませんが、少し「なぜ」を追加したいと思います。

ご覧のとおり、int []グレードが作成されると、それはメモリ内のランダムな場所を指す「空のポインタ」に他なりません。

'new int [numGrades]'の戻り値を割り当てることにより、ポインタの値は、割り当てられたメモリ内の場所を指します。このメモリは、「整数のサイズにグレード数を掛けたもの」の正確なサイズであり、安全にアクセスできます。

この配列のサイズが小さすぎる(またはまったくない)場合、アクセスできないメモリを書き込んでいるため、通常、メモリ違反の例外がトリガーされ、プログラムがクラッシュしたり、その他の未定義の動作が発生したりします。

覚えておいてください:配列は通常の変数とは異なります。

そうそう、短くするために:

grades = new int [numGrades]; あなたが探しているものです。線のすぐ下で、入力された生徒数を解析しています。

追加のアドバイスとして:ユーザー入力は常にエラーの原因です。無効な出力のエラー処理を必ず含めてください。(たとえば、ある賢者が成績の代わりに「ジョン・スミス」を入力することにした場合。

于 2012-07-28T14:49:43.270 に答える
0

あなたが書くとき

int[] grades;

gradesタイプ の値を保持できるという変数を宣言しますint[]。ただし、使用する前に、実際のデータ構造を作成するなど、初期化する必要もあります。これは次のように行われます。

int[] grades = new int[numStudents];

を宣言するときは事前にサイズを知る必要があるため、配列の作成をループ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

使用する前に変数を初期化する必要があります。

コードの正しいバージョンの 1 つを参照してください。

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 に答える