1

セッターの助けを借りて配列に名前を入力したい...これは私のコードです...どうやってそれを行うのを手伝ってもらえますか?? ありがとうございます。

//これは入力ステートメントを持つクラス myclass です //私の問題はプログラム say Exception in thread "main" java.lang.NullPointerException //at studentproject.MyClass.AddList(MyClass.java:27) //at studentproject.Main. main(Main.java:20) // Java Result: 1 // プログラムのどこに問題があるのか​​ ???

public class MyClass
{
     Student St = new Student();

     Student[]Array1 = new Student[10];
     Student[]ArrayF1 = new Student[10];

     void AddList()
     {

            Scanner Scan = new Scanner(System.in);

            for (int i=0; i<Array1.length & i<ArrayF1.length; i++)
            {
                System.out.println("Enter Student NAME Number " + (i+1) + ":");
                Array1[i].setName(Scan.next());


                //System.out.println("Enter Student MARK Number " + (i+1) + ":");
                //St.setMark(Scan.nextFloat());
            }

    }

}

// これは、すべてのセッターとゲッターを備えた私の Student クラスです

public class Student
{
private String Name;
private float Mark;

/**
 * @return the Name
 */
public String getName() {
    return Name;
}

/**
 * @param Name the Name to set
 */
public void setName(String Name) {
    this.Name = Name;
}

/**
 * @return the Mark
 */
public float getMark() {
    return Mark;
}

/**
 * @param Mark the Mark to set
 */
public void setMark(float Mark) {
    this.Mark = Mark;
}

もう1つの問題は、配列を印刷したいときです。配列の値ではなく、配列のメモリアドレスが印刷されます...私の問題はどこですか...印刷される内容は次のようになります...生徒の名前番号10を入力してください: dddddd "studentproject .Student@1b67f74"

    void PrintList()
    {

            for (int i=0; i<Array1.length; i++)
            {

                System.out.println(Array1[i]);

            }
    }
4

4 に答える 4

1

Java配列はオブジェクトであるため、次のように記述します。

String[] asdf = new String[size];

配列に格納された10 個のオブジェクトを作成するのではなくString、すべての要素 (参照) が に設定された配列のオブジェクトのみを作成しnullます。

Studentプロパティを設定する前に、オブジェクトを作成する必要があります。

 Array1[i] = new Student();    
 Array1[i].setName(Scan.next());
于 2012-12-28T21:07:24.517 に答える
1

配列の要素を初期化することを忘れないでください:

for (int i = 0; i < Array1.length; i++) {
    Array1[i] = new Student();
}

この行: Student[] Array1 = new Student[10];null 要素でいっぱいの空の配列を作成します。それらを使用する前に、それぞれを順番にインスタンス化する必要があります。そうしないと、配列内の要素でNullPointerExceptionメソッド (たとえば ) を呼び出そうとすると厄介な問題が発生します。setName()

にも同じ考慮事項が適用されArrayF1ます。そしてスタイルの問題 - Java では、変数名とメソッド名は小文字で始まり、クラス、インターフェース、および列挙名のみが大文字で始まります。

于 2012-12-28T21:08:13.033 に答える
1
 Student[]Array1 = new Student[10];

Array110nullエントリでいっぱいになります。

Array1[i].setName(Scan.next());

が呼び出さsetName...null、結果は になりNullPointerExceptionます。

この問題を解決する 1 つの方法は次のとおりです。

1) Create new Student object inside for loop
2) call setName... on object created in step1
3) Set object to array index.
于 2012-12-28T21:05:37.317 に答える
1
  Student[]Array1 = new Student[10];

Student実際には、適切に構築されたオブジェクトが 10 個得られるわけではありません。それが行うことは、適切に構築された 10 個Studentのオブジェクトを保持するのに十分なスペースを割り当てることです。したがって、それが呼び出す配列に対する各反復で何が起こるかですnull.setName。これにより、NPE が発生します。

Student割り当て後に onjects を作成する場合は、次のようにします。

for(int i = 0;i<Array1.length;i++)
{  
    Array1[i] = new Student();
}  

それ以降の変数名は、それらが最終的なものでない限り小文字であり、その後はすべて大文字です。

于 2012-12-28T21:08:33.410 に答える