-1

私のプログラムに質問があります:

public class Muster2 {
int[] farben;

4 つの整数で配列を構築します

public Muster2(int f0, int f1, int f2, int f3) {
int[] farben = new int[4];
farben[0] = f0;
farben[1] = f1;
farben[2] = f2;
farben[3] = f3;
}

この配列を文字列にキャストします

public String toString() {
String result = "";
    for (int i=0;i<4;i++) {
      char convert = (char) farben[i];
      result+=convert;
    }
return result;
}

アイデア: 最初に、2 つの配列が同じ位置に同じ整数を持っている場所を確認したいと思います: 例: [1,2,3,4] と [1,4,5,6]。これらの 2 つの配列の counter_weiss は = 1 である必要があります。位置 0 の要素のみが両方の配列で同じであるためです。したがって、counter_weiss は、両方の配列でまったく同じ位置にある同じ要素をカウントします。counter_schwarz は、両方の配列に存在する要素をカウントしますが、他の位置にあります。したがって、counter_schwarz も = 1 になります。指定された配列の場合、最初の配列では位置 3 に 4 があり、2 番目の配列では 2 番目の位置に 4 があります。

public Bewertung bewerte(Muster versuch) {
int counter_schwarz = 0;  
int counter_weiss = 0;

最初は 0 でなければなりません

for (int i=0;i<4;i++) { 

アレイを駆け抜ける

if (this.farben[i] != versuch.farben[i]) {

同じ要素が同じ位置にあるかどうかを確認します

for (int o=i+1;o<4;i++) {      

そうでない場合は、別の位置にあるかどうかを確認しますが、i + 1 で o から開始する必要があります。そうしないと、i = 3 のように配列の末尾にあるインデックスに到達したときに 2 回カウントされます。0,3 が可能な組み合わせであるとしましょう。したがって、最初の配列の最初の要素は、位置 3 の 2 番目の要素と同じ数になります。この場合、counter_schwarz は 0,3 からも 3,0 からも +1 を取得します。

if(this.farben[i] == versuch.farben[o]) {   
              counter_schwarz += 1;                            
       }
    }
 }
 else counter_weiss +=1;   
 }

同じ位置の要素が同じ場合、counter_white は +1 を取得します。

Bewertung aktuelleBewertung = new Bewertung (counter_schwarz, counter_weiss);

return aktuelleBewertung;  /* here the counters are used to construct an object, 
which doesn't matter now, this part should work fine */
}

public static void main (String[] args) {

Muster Muster1 = new Muster (1,2,3,4);
Muster Muster2 = new Muster (2,3,4,5);

Bewertung Neu = Muster1.bewerte(Muster2);

System.out.println(Neu.toString());

}

}

問題は、私が NullPointerException を取得することです

if (this.farben[i] != versuch.farben[i])

理由がわかりません、誰か助けてくれませんか?

ありがとう

4

2 に答える 2

1

問題はここにあります:

public class Muster2 {
int[] farben;

そしてここ:

public Muster2(int f0, int f1, int f2, int f3) {
int[] farben = new int[4];

と呼ばれる 2 つの完全に別個の変数を宣言しますfarben

後者にデータを入力して、スコープ外に出ます。前者はそのままnullなので、その要素にアクセスしようとすると NPE が発生します。

于 2013-06-29T20:20:59.997 に答える
0

'o' をループ カウンターとして使用する場合は、'i' をインクリメントしないでください。

for (int o=i+1;o<4;i++) {

そうでなければ、完全な実行例を投稿しないと、他の人々のプログラムからのエラーを追跡するのは非常に困難です!

おそらく、デバッガーの使用方法を学ぶ必要があります (NetBeans または Eclipse を使用すると、デバッグが簡単になります)。

于 2013-06-29T20:23:35.703 に答える