2014-11-05 38 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."); 
}