2014-11-24 72 views
6

我的項目是最終完成,但我唯一的問題是我的老師不接受我們的代碼「休息」。有人可以幫我解決這個問題,我一直在努力工作好幾天,而且我似乎無法讓程序在沒有使用它們的情況下工作。休息時間位於我的DropYellowDisk和DropRedDisk方法中。除此之外,我的連接四個程序是完美無瑕的。突圍嵌套for循環中不使用破

private static void DropYellowDisk(String[][] grid) { 

     int number = 0; 
     Scanner keyboard = new Scanner (System.in); 
     System.out.println("Drop a yellow disk at column (1–7): "); 
     int c = 2*keyboard.nextInt()+1; 


     for (int i=6;i>=0;i--) 
      { 
       if (grid[i][c] == " ") 
       { 
       grid[i][c] = "Y"; 
       break; 
       }} 
    } 

    private static void DropRedDisk(String[][] grid) { 

     Scanner keyboard = new Scanner (System.in); 
     System.out.print("Drop a red disk at column (1–7): "); 
     int c = 2*keyboard.nextInt()+1; 
     for (int i =6;i>=0;i--) 
      { 
       if (grid[i][c] == " ") 
       { 
       grid[i][c] = "R"; 
       break; 
       } 

    }} 
+1

那不是最簡單的方法是分配會失敗的條件'i'值?即使你把代碼放在循環後面,它也可以工作 – 2014-11-24 22:49:54

回答

8

我的老師不接受「休息」

從編程的角度來看,這簡直傻透了(雖然我敢肯定,它有可取之處從教學的一個)。

但有一個簡單的解決辦法在這種特殊情況下,因爲循環您break從荷蘭國際集團都在各自的方式結束。因此,您可以用return聲明替換它們。即:

private static void DropYellowDisk(String[][] grid) { 

    for (int i=6;i>=0;i--) 
    { 
     if (grid[i][c] == " ") 
     { 
     grid[i][c] = "Y"; 
     return; //break 
     }} 
} 
+9

如果你的老師不接受休息,那麼使用'goto'讓他驚喜。 – mostruash 2014-11-24 21:42:56

+0

使用'goto'-s可能不太好。 「休息」和「繼續」真的很像他們,特別是有標籤的人。 'return'語句也可能增加圈複雜度,使結果更難理解,推理。 (我的看法:沒有禁止,但不鼓勵它的。) – 2014-11-24 21:45:15

+1

@mostruash [相關](http://xkcd.com/292/) – ryrich 2014-11-24 21:45:30

3

您可以使用boolean標誌,而不是斷裂與while循環。你也應該用equals方法比較字符串。

private static void DropYellowDisk(String[][] grid) { 

    int number = 0; boolean flag=true; 
    Scanner keyboard = new Scanner (System.in); 
    System.out.println("Drop a yellow disk at column (1–7): "); 
    int c = 2*keyboard.nextInt()+1; 

     int i=6; 
     while(i>=0&& flag) 
     { 
      if(grid[i][c].equals(" ")) 
      { 
       grid[i][c]="Y"; 
       flag=false; 
      }  
      i--; 
     } 
} 
4
boolean flag = false; 
for (int i=6;i>=0 && !flag;i--) { 
    if (grid[i][c] == " ") { 
     grid[i][c] = "Y"; 
     flag = true; 
    } 
}