2014-11-05 247 views
2

所以我试图做一个for循环来搜索一个数组并返回找到的缺失值。使用for循环查找数组中的缺失值

这里是我的方法:

public void questionsMissed() { 
      int missedQuestions = 0; 
      for (int i = 0; i < 20; i++) { 
       if (answers[i] == null){ 
        missedQuestions++; 
       } 
      } 
System.out.println("You have missed " + missedQuestions + " questions."); 
     } 

的错误就是if语句。我认为这是因为空。我怎样才能找到缺失的值?

错误:无法比拟的类型:int和

+3

告诉我们完整的代码和问题 – 2014-11-05 18:49:33

+2

你得到了什么错误? – Eran 2014-11-05 18:49:48

+1

...和错误,请 – Mureinik 2014-11-05 18:49:51

回答

3

你得到的错误,因为你正在尝试比较原始数据类型,int,到null。只有引用类型可以与null进行比较。原始类型总是有一个值 - 它们不能是null,所以编译器告诉你比较没有意义。

有两种方法你可以去解决这个:

  • 交换机answersInteger类型 - 这将让你检查它的值null,在包装原始整数成的代价引用包装器。
  • 您可以指定一个整数值,比方说,-1,为“丢失” - 这将让你保持intanswer[]的元素的类型,但仍然会有必须在任何地方使用的特殊号码你的程序。

由于您使用您的回答char价值观,我会用第二种方法,但首先我会做的charanswerscorrectAnswers阵列。有一个方便的“特殊价值”为未使用的值 - 空字符\0'

if (answers[i] == '\0') { 
    ... 
} 
+1

很棒的回答。感谢您的帮助和具体的每个答案。 – Lewis 2014-11-05 19:06:32

2

两件事情: -

有没有像丢失,你可以比较使用空值。你可以将它与0进行比较,因为那些被定义的数组成员被初始化为0(感谢dasblinkenlight纠正我,我与C混淆),但这似乎是一个糟糕的决定/选择。

我建议你把-1失踪的值作为定点条件的检查一般是完成的,然后比较喜欢的值: -

public void questionsMissed() { 
    int missedQuestions = 0; 
    for (int i = 0; i < 20; i++) { 
     if (answers[i] == -1){ 
      System.out.println("OOPS,the element here is missing!"); 
     } 
    } 
} 
+0

谢谢你的回答。但是,如果我使用== 0并不意味着它不会返回任何内容,或者大多数数组的默认值都是0吗?谢谢。 – Lewis 2014-11-05 18:55:10

+0

@ Lewis-SORRY刘易斯,编辑我的答案。在java中,数组成员始终由0初始化,无论如何,请将-1用于定点条件! – 2014-11-05 19:04:58

+0

@ dasblinkenlight-THANKS,已更正。我在C和Java之间感到困惑,因为现在我忙于一些C编码!感谢和+!为你。另外,我在答复中提到了你的观点。 – 2014-11-05 19:05:55

1

你比较原始类型intnull。原始类型不是对象,并且始终有一个值。因此,您无法将它们与null进行比较。

如果您使用Integer[],您可以通过插入null来标记错过的问题,或者您可以将它们与'\ 0'进行比较。

但既然你已经使用字符文字,我会用Character来代替。

当您使用原始包装类型时,您的方法也会变得更容易。例如。

Character[] answers = new Character[20]; 

.... 

public void questionsMissed() { 
    int missedQuestions = Collections.frequency(Arrays.asList(answers), '\0'); 
    System.out.println("You have missed " + missedQuestions + " questions."); 
}