2014-11-02 89 views
0

我有一個二維布爾數組'poorSignal',需要編寫一個返回網格的方法,如果數組上的某個點爲真,則顯示X,如果爲false,則爲O顯示。這裏是我的代碼:缺少for循環的return語句

public String display() 
{ 
    for(int i = 0; i < mapSize; i++) 
    { 
     for(int j = 0; j < mapSize; j++) 
     { 
      if(poorSignal[i][j] = true) 
      { 
       return "O "; 
      } 
      else 
      { 
       return "X "; 
      } 
     } 
     return "\n"; 
    } 
} 

當我編譯時,它給了我'在方法的最後一行缺少return語句'。我也不確定'返回'\ n「是否會在打印數組時添加一行。

這是一個賦值問題,所以我不能直接打印它或只是打印布爾值 - 它必須是一個生成網格的方法。

+2

你需要在外部循環之外有一個'return'。 – Maroun 2014-11-02 15:39:40

+1

也在這裏'if(poorSignal [i] [j] = true)'你**分配**而不是比較。使用'=='或簡單地寫'if(poorSignal [i] [j])' – Maroun 2014-11-02 15:40:26

+0

它應該返回什麼? p.s. - 感謝您發現! – user4207687 2014-11-02 15:40:50

回答

2

編譯器無法知道該循環是否實際運行,因此您還必須在外循環外部有一個return語句。然後,如果我看看你的代碼,我不確定返回是否是你真正想要的。如果您打算打印整個矩陣,則可能需要使用StringBuilder,然後在循環內使用append方法。外環後,使用toString方法,像這樣返回建設者的字符串表示:

StringBuilder sb = new StringBuilder(); 
// loop 
sb.append(someValue); 
sb.append('\n'); 
// after loop 
return sb.toString(); 
+0

我不知道,謝謝。我在循環的外部添加了'return null',它允許它進行編譯,但正如你所說,它只是打印第一個東西。 我不確定StringBuilder是如何工作的,但我會嘗試並使用它。 – user4207687 2014-11-02 15:43:48

+0

當然,只能在方法體的末尾返回(在第二個循環之後)並刪除其他的返回語句。我已經編輯了相應的答案。 – rethab 2014-11-02 15:46:54

+0

我設法做到這一點之前,我看到你的答案,但謝謝,這完美的作品! – user4207687 2014-11-02 15:52:36

0

在我看來,你不想爲每個調用的返回值。更好的做法是創建一個StringBuilder並在StringBuilder中構造一個網格(在每次迭代之後使用newLine),然後返回構造的StringBuilder的外部循環的String。

無論如何,如果你mapSize是0,你將永遠不會得到任何return語句(和它的運行數據,編譯器有無法知道參數大小的方式。

public String display(){ 
    StringBuilder sb = new StringBuilder(); 
    for(int i = 0; i < mapSize; i++){ 
    for(int j = 0; j < mapSize; j++){ 
     if(poorSignal[i][j]){ //don't use comparing to true if you have stored boolean values 
      sb.append("O "); 
     }else{ 
      sb.append("X "); 
     } 
    } 
    sb.append("\n"); 
    } 
    return sb.toString; 
} 
0

當函數到達第一返回,它只是返回值和退出你應該這樣做:

public String display(int i, int j) { 
    if(poorSignal[i][j]) { 
     return "O \n"; 
    } 
    return "X \n"; 
} 

,並調用它是這樣的:

for(int i = 0; i < mapSize; i++) { 
    for(int j = 0; j < mapSize; j++) { 
     someStringVariable[i][j] = display(i, j); 
    } 
} 

這樣,當poorSignal [i] [j]爲true時,它將返回「O \ n」並停止執行其餘的功能。如果它是假的,它將執行另一個返回。還要注意「poorSignal [i] [j]」,而不是「poorSignal [i] [j] = true」,如果成功,它實際上會將真分配給poorSignal [i] [j]並返回true, 。您可以編寫「poorSignal [i] [j] == true」,但poorSignal已經是布爾值,所以「== true」部分不會添加任何有趣的內容。