不使用break语句如何跳出嵌套的for循环?

6

我的项目终于完成了,但唯一的问题是我的老师不接受我们代码中的“break”语句。有人能帮我解决这个问题吗?我已经花了几天时间努力,但似乎无法在不使用它们的情况下让程序正常运行。这些“break”语句位于我的DropYellowDisk和DropRedDisk方法中。除此之外,我的四子棋程序没有其他问题。

    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
最简单的方法不是将一个会导致 for 循环条件失败的值分配给 i 吗?即使在循环后放置代码,这也可以工作。 - Félix Adriyel Gagnon-Grenier
3个回答

8

我的老师不允许使用“breaks”。

从编程的角度来看,这很愚蠢(尽管我相信在教学上有一定的价值)。

但在这种情况下有一个简单的解决方法,因为你要从中断的循环都位于各自方法的结尾。因此,你可以用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
使用“goto”可能不是一个好的风格。 breakcontinue真的像它们一样,尤其是带有标签的情况下。 return语句也可能增加圆形复杂度,使结果更难以理解和推理。(我的看法:没有禁止,但也不鼓励使用。) - Gábor Bakos
我也曾经有过这样的经历,亚历克斯,别担心。关于“goto”,如果你正在检查涉及嵌套循环的嵌套约束,并且在这种情况下,“goto”可以使代码真正易读,那么使用它是很好的选择。否则,这只会让你的老师感到惊讶。 - mostruash
1
在教学/布置作业时,这是一个好的实践。目标是确保学生能够使用到目前为止所涉及的主题来完成任务。 - Xline
谢谢大家,特别是 @drewmoore。在这门课程中,最简单的东西真的让我感到困扰,但我真的很喜欢它! - Alex

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

3
您可以使用布尔标志代替 break 来实现 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--;
      }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接