在不使用break的情况下打破嵌套的for循环

时间:2014-11-24 21:39:23

标签: java loops nested-loops 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;
              }

    }}

3 个答案:

答案 0 :(得分: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
      }}
}

答案 1 :(得分:4)

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

答案 2 :(得分: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--;
      }
}