-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;
}

想法:首先,我想看看两个数组在同一位置具有相同整数的位置:示例:[1,2,3,4] 和 [1,4,5,6]。这两个数组的 counter_weiss 应该 = 1,因为只有位置 0 的元素对于两个数组是相同的。所以 counter_weiss 计算两个数组中完全相同位置的元素。counter_schwarz 计算两个数组中存在但位于其他位置的元素。所以 counter_schwarz 也将 = 1,对于给定的数组,因为在第一个数组中我们在位置 3 有 4,而在第二个数组中我们可以在第二个位置找到 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)时,我会计算两次。假设 0,3 是一种可能的组合,因此第一个数组的第一个元素与位置 3 上的第二个元素具有相同的数字。然后 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];

您声明了两个完全独立的变量,都称为farben.

您填充后者并让其超出范围。前者仍然存在null,因此当您尝试访问其元素时会得到 NPE。

于 2013-06-29T20:20:59.997 回答
0

如果你使用'o'作为循环计数器,那么你不应该增加'i':

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

否则,如果他们不发布完整的可执行示例,就很难跟踪其他人程序的错误!

您或许应该学习如何使用调试器(NetBeans 或 Eclipse 使调试变得相当轻松),或者在您的代码中撒上大量 println() 以查看发生了什么。

于 2013-06-29T20:23:35.703 回答