NullPointerException,程序无法编译

时间:2013-06-29 20:10:31

标签: java exception nullpointerexception

我对我的计划有疑问:

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

将此数组转换为String

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开始,否则当我到达数组末尾的索引时我会计算两次,比如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])

我不知道为什么,有人可以帮助我吗?

由于

2 个答案:

答案 0 :(得分:1)

问题在于:

public class Muster2 {
int[] farben;

在这里:

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

你声明了一个名为farben的两个完全独立的变量。

你填充后者,让我们超出范围。前者仍为null,因此当您尝试访问其元素时,您将获得NPE。

答案 1 :(得分:0)

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

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

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

您应该学习如何使用调试器(NetBeans或Eclipse使调试相当轻松),或者使用大量println()来编写代码以查看发生的情况。