2016-03-25 19 views
1

Ok, so hat mein Computerlehrer uns gebeten, ein einfaches Spiel zu machen, das den Benutzer ersucht, eine radomly generierte Zahl zu erraten, aber ich möchte es einen Schritt weiter und machen es so, dass es Fehler anzeigt Nachrichten, wenn der Benutzer bestimmte Dinge versucht. Das Problem hier ist, dass ich zu booleans neu bin und gut, habe ich ein bisschen Mühe, java.util.Scanner und booleans verwendend. Also, wenn jemand einen kurzen Blick darauf werfen könnte, würde ich es begrüßen.Guessing Spiel Hilfe :)

import java.util.Scanner; 
import java.util.Random; 

public class MoreGuessing{ 
//Instantiation    
      Scanner reader = new Scanner(System.in); 
      Random number = new Random(); 
//Variables 
    int randomnumber = number.nextInt(10) + 1; 
    int cntr = 1; 
    static String decimalguessed; 
    String error1 = "Error001: Decimal found, please enter a whole number between 1-10." + "\n" + "Program terminated......";//Decimal portion error. 
    String error2 = "Please enter a positive number." + "\n" + "Program terminated......"; //Negative number error. 
    String error3 = "Unknown character entered." + "\n" + "Program terminated......"; //Unknown character error. 
//Verifier 
public static boolean verifyLetters() { 
    if (decimalguessed.matches("[a-zA-Z]+")){ 
     return true; 
    }else{ 
     return false; 
    } 
}   
public static void main(String [] args){ 
//Input and display 
    System.out.print("Please enter a whole number between 1-10: "); 
     decimalguessed = reader.nextLine(); 
//Process and Errors 
while (decimalguessed != randomnumber) { 
if (verifyLetters() != false){ 
      System.out.println(error3); 
      System.exit(1);} 
if (decimalguessed % 1 != 0) { 
      System.out.println(error1); 
      System.exit(1);} 
if (decimalguessed < 0) { 
      System.out.println(error2); 
      System.exit(1);} 
if (randomnumber != decimalguessed){ 
      System.out.println("You've lost, please make another attempt.");} 
System.out.print("Please enter a whole number between 1-10: "); 
    decimalguessed = reader.nextDouble(); 

cntr++; 

    } 
if (cntr == 1) {System.out.println("Congratulations! You've guessed the number on your first attempt!");; 
} 
else {System.out.println("Congratulations! You've guessed the number, it took you " + cntr + " tries");} 
} 
} 

Antwort

1

Sie müssen Ihre Eingabe analysieren. decimalguessed ist eine Zeichenfolge, und Sie können keine Vergleiche wie decimalguessed % 1.

Sie können es so in eine ganze Zahl konvertieren:

int guess = 0; 
try { 
    guess = Integer.parseInt(decimalguessed); 
} catch (NumberFormatException e) { 
    System.out.println("Your guess was not an integer: " + e.getMessage()); 
    System.exit(1); 
} 

Diese beiden Fälle behandelt, wo decimalguessed Buchstaben enthält, und wo es enthält Dezimalstellen/Fraktionen. decimalguessed ist immer noch eine Zeichenkette, aber guess enthält jetzt die ganzzahlige Version davon, so dass Sie es mit randomnumber richtig vergleichen können. (Ihre Schleife würde noch nie verlassen, weil ein String nie ist == eine ganze Zahl)


Einige andere Hinweise:

Sie sollten nie haben:

if (condition) { 
    return true; 
} else { 
    return false; 
} 

Dies kann immer sein einfach ersetzt mit

return condition; 
0

Es fühlt sich an, als ob Sie sehr neu dazu sind. Willkommen in der Programmierung!

Also zunächst, in Java im Allgemeinen werden Sie nicht alle diese Instanziierung und Variablen Sachen außerhalb Ihrer Hauptfunktion haben, es sei denn, Sie werden alles statisch machen. Ich würde all das in Ihre Hauptfunktion verschieben, die dezimalgeprüfte Variable unstatic und die Funktion verifyLetters so einrichten, dass sie ein Argument von String decimalguessed nimmt. Es kann auch sinnvoll sein, zu prüfen, ob der Wert eine Zahl ist, anstatt zu sehen, ob es sich um einen Buchstaben handelt. Es gibt viele Nicht-Zahl-, Nicht-Buchstaben-Zeichen.

Sobald Sie herausgefunden haben, dass die Schätzung eine Zahl ist, müssen Sie Java sagen, dass es Eins ist (es in eine Dezimalzahl umwandeln) und dann weitere Vergleiche mit dieser Dezimalzahl durchführen.

Darth Android macht auch einige gute Punkte, vor allem über Booleans. Sie sollten nie das einzige Ergebnis eines if/else sein, um einen booleschen Wert zurückzugeben, sondern geben nur den booleschen Wert zurück. Vermeiden Sie auch Vergleiche mit true/false, machen Sie einfach das if nur für die Funktion/Variable oder negieren Sie sie mit einem '!' auf falsch prüfen.

Viel Glück!