2014-11-24 5 views
6

Мой проект, наконец, завершен, но моя единственная проблема в том, что мой учитель не принимает «перерывы» в нашем коде. Может кто-то помочь мне решить эту проблему, я работал над ней в течение нескольких дней, и я просто не могу заставить программу работать без их использования. Перерывы находятся в моих методах 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

не самый простой способ быть бы присвоить значение, которое будет провалить для состояния в 'i'? Он будет работать, даже если вы поместите код после цикла –

ответ

8

мой учитель не принимает «разрывы»

С точки зрения программирования, это просто глупо (хотя я уверен, что он заслуживает внимания из учебного одного).

Но в этом конкретном случае есть простой способ, потому что петли вашего break ing все находятся в конце их соответствующих методов. Таким образом, вы можете заменить их заявлениями 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

+0

Возможно, это не лучший стиль для использования «goto». 'break' и 'continue' действительно похожи на них, особенно с ярлыками. Операции 'return' могут также увеличивать циклическую сложность, сделать результат труднее понять, рассуждать. (Мой прием: никакого запрета, но не поощряя его.) –

+1

@mostruash [related] (http://xkcd.com/292/) – ryrich

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; 
    } 
} 
Смежные вопросы