2014-11-24 66 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; 
    } 
}