2016-10-22 6 views
-1

Was ist falsch mit meinem Code? Ich versuche, einen Benutzer aufzufordern, eine Nummer einzugeben, wenn es nicht zwischen 1 und 6 oder einer Nummer ist, sollte es ungültig sagen und einen anderen Versuch auffordern. Der Benutzer darf nur 3 Versuche haben.tun While-Schleife mit Versuch fangen

import java.util.Scanner; 

public class Game { 

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    int[] numbers = new int[6]; 

    System.out.println("Enter a number on a die from 1-6:"); 
    String dieinput = input.next(); 
    int invalidcount = 0; 
    System.out.println("Your number is: " + dieinput); 



    do{ 
    try 
    { 
     // the String to int conversion 
     int dienum = Integer.parseInt(dieinput.trim()); 
     int dienumOE = 0; 
     int count=0; 

     //test number input 
     if ((dienum >= 1) && (dienum<= 6)) 
      System.out.println("number is " + dienum + oddoreven(dienum)); 
     else 
      System.out.println("Invalid number, please enter a number 1-6"); 
      count++; 
      System.out.println("Count" + count); 
     } 
    catch (NumberFormatException nfe){ 
     System.out.println("Invalid number, please enter a number 1-6"); 
     System.out.println("Count" + count); 
     } 
    while (count <= 3 && count >=0); 
    } 
    } 





// Check if odd or even 
public static String oddoreven(int num) { 
    String result; 

    if (num % 2 == 0) 
     result = "even"; 
    else 
     result = "odd"; 
    return result; 
} 
} 
+1

Unendliche Schleife. Sie setzen die Anzahl zu Beginn jeder Schleife auf 0. Siehe die Antwort unten, aber setze diese Variable auch nicht auf Null innerhalb der Schleife. –

+0

Bitte poste ein komplettes Beispiel - dein Quellcode kompiliert nicht einmal. – GhostCat

+0

Ich habe den Int-Zähler geändert, aber die Do-While-Funktion funktioniert immer noch korrekt. Vorschläge? –

Antwort

2

Ihr Problem ist „falsch“ Scoping: Sie können keine Variable innerhalb des Fang Block verwenden, die Block versuchen im Rahmen des erklärt wird!

Mit anderen Worten; Sie brauchen:

int counter = 0; 
try { ... 
} catch (... 

, wenn Sie Zähler innerhalb beide Versuch und fangen verwenden möchten!

Die „Regel“ ist sehr einfach: eine Variable bis zu, dass nur sichtbar ist,}, die den „Block“ schließt es in

verhindert, dass Sie aus dem Code tatsächlich zu kompilieren.!

Also, die echte Lektion hier ist mehr wie: schreiben Sie nicht 100 Zeilen Code dann führen Sie den Compiler. Schreibe nur so wenige Zeilen wie möglich - jedes Mal wenn du denkst: das ist "genug" zum kompilieren .. dann kompilieren. Und beheben Sie dann die Ihnen gemeldeten Fehler. Der Java-Compiler ist wirklich gut darin, Ihnen spezifische Nachrichten zu geben, die Ihnen sagen, was Sie falsch gemacht haben; aber die mehr chaotischen Code, den Sie aufstellen, desto schwieriger wird das!

Und für den Eintrag: SO ist kein "remote" Compiler-Service, den Sie verwenden sollten, um Ihren unordentlichen Code kompilieren zu lassen!

+0

* Und für den Rekord: SO ist kein "Remote" Compiler-Dienst, den Sie verwenden sollten, um Ihren unordentlichen Code zu kompilieren! * Das ist lustig, weil Sie genau das getan haben. Es gibt Duplikate dieser Fragen, es gibt keine Notwendigkeit, erneut zu antworten. – Tunaki

Verwandte Themen