2014-11-24 11 views
6

Mein Projekt ist endlich fertig, aber mein einziges Problem ist, dass mein Lehrer "Brüche" in unserem Code nicht akzeptiert. Kann jemand mir helfen, dieses Problem zu lösen, ich habe seit Tagen daran gearbeitet, und ich kann einfach nicht scheinen, das Programm zu arbeiten, ohne sie zu verwenden. Die Pausen befinden sich in meiner DropYellowDisk- und DropRedDisk-Methode. Abgesehen von diesem Problem ist mein Connect-4-Programm fehlerlos.Ausbrechen einer verschachtelten for-Schleife ohne Pause

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

Wäre das nicht der einfachste Weg sein, einen Wert zuzuweisen, der für Zustand zu 'I' scheitern würde? Es würde auch funktionieren, wenn Sie Code nach der Schleife setzen würden –

Antwort

8

mein Lehrer akzeptiert keine „Brüche“

Aus Sicht der Programmierung, das ist einfach nur dumm (obwohl ich bin sicher, dass es Verdienst aus einem Lehr man hat).

Aber es gibt eine einfache Problemumgehung in diesem speziellen Fall, weil die Schleifen Ihre am Ende ihrer jeweiligen Methoden sind. Daher können Sie sie durch return Anweisungen ersetzen. das heißt:

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

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

Wenn Ihr Lehrer keine Pausen akzeptiert, dann benutzen Sie 'goto' und überraschen Sie ihn zur Hölle. – mostruash

+0

Es ist vielleicht kein guter Stil, um 'Goto'-s zu verwenden. 'break's und' continue's sind wirklich wie sie, besonders mit Labels. 'return'-Aussagen könnten auch die zyklomatische Komplexität erhöhen, das Ergebnis schwerer verständlich machen, Grund zur Annahme. (Mein Take: kein Verbot, aber auch nicht ermutigen.) –

+1

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

3

Sie können boolean Flagge statt Bruch mit while Schleife verwenden. Außerdem sollten Sie Strings mit der equals Methode vergleichen.

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; 
    } 
} 
Verwandte Themen