2016-04-09 2 views
0

Ich erstelle ein Hoch/Niedrig-Ratespiel als Teil einer Studienaufgabe, und der Teil, an dem ich festhalte, erhält die Anzahl der an die Hauptmethode zurückgegebenen Annahmen. Uns wurde ausdrücklich gesagt, dass die Hauptmethode ist, die Anzahl der Vermutungen zu drucken, während die Methode "PlayGame" tatsächlich spielt.Java/Erstellen hi/low Spiel mit mehreren Methoden, bei der Rückkehr no. Vermutungen

Es gibt mehr zu dem Code, eine Methode namens giveReponse, die überprüft, ob die Zahl korrekt oder zu hoch/niedrig ist, aber es funktioniert wie vorgesehen. Ich bekomme "Ich kann kein Symbol finden", wenn ich versuche zu drucken, wie viele Vermutungen nötig waren, um das Spiel zu beenden. Wenn es nicht so wichtig war, es in der Hauptmethode zu drucken, würde ich den Betrag in der Methode PlayGame drucken, aber das ist ein No-Go. Was mache ich falsch? Der Code sieht wie folgt aus:

public class HiLo { 
public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 
     System.out.println("Welcome to classic guessing game of high/low!"); 

     String difficulty = scan.next(); 

      if (difficulty.equals("easy")) {    
      playGame(10); 
      } else if (difficulty.equals("medium")) { 
      playGame(100); 
      } else if (difficulty.equals("hard")) { 
      playGame(1000); 
      } 

      System.out.println("You won in" + guesses + "attempts."); 
    }//EndsMain 

     public static int playGame(int maxNumber) { 
      Scanner scan = new Scanner(System.in); 
      int rannr = (int)(Math.random() * maxNumber) +1; 
      int answer = rannr; 
      int guess = 0; 
      int guesses = 0; 

      System.out.println("Game is starting..."); 

      do { 
      guess = scan.nextInt();  
      guesses ++;     
      giveResponse(answer, guess); 

       if (answer == guess) { 
       break; 
       }  
      } while (answer != guess); 

     return guesses; 
    } //Ends playGame 
+0

Sie machen den klassischen Student/Noob-Fehler: Putting alles in einer Hauptklasse. Umhüllen Sie alles in einer Klasse; Lassen Sie Ihren Hauptbenutzer es instanziieren und rufen Sie seine Methoden auf. Java ist eine objektorientierte Sprache. Beginnen Sie, über Probleme in Bezug auf interagierende Objekte nachzudenken. – duffymo

+0

Verwenden Sie den Rückgabewert von Methodenschätzungen - es sollte der Wert sein, den Sie ausgeben müssen. Sie wissen, wie das geht - siehe scan.nextInt(). – laune

+0

Denken Sie über die _Schwankungen_ von – fdsa

Antwort

2

Ihre Methode playGame() Wert zurückkehrt, aber da keiner Variable nicht zugewiesen wird, werden diese Erträge zu verirren ... zusätzlich zu, dass es aussieht wie der Code ist nicht vollständig :

diese Aussage gehen zu lassen, kompilieren Sie nicht:

System.out.println("You won in" + guesses + "attempts."); 

weil die einzige guesses Variable ich dort sehen in der p scoped ist layGame Methode ....

tut stattdessen so etwas wie:

public static void main(String[] args) { 
    Scanner scan = new Scanner(System.in); 
    System.out.println("Welcome to classic guessing game of high/low!"); 
    int guesses = 0; 
    String difficulty = scan.next(); 

    if (difficulty.equals("easy")) { 
     guesses = playGame(10); 
    } else if (difficulty.equals("medium")) { 
     guesses = playGame(100); 
    } else if (difficulty.equals("hard")) { 
     guesses = playGame(1000); 
    } 
+0

Danke Xoce für eine schnelle Antwort! Das hat mein Problem gelöst. – exceusdoesjava

0

Das Problem bei ist:

System.out.println("You won in" + guesses + "attempts."); 

Da die Variable guesses nicht im Hauptverfahren definiert, die Compiler doesn Ich weiß nicht, worauf du mit diesem Symbol referenzierst.

Aber da playGame() kehrt die Anzahl der Vermutungen, ich so etwas wie dieses empfehlen würde:

if (difficulty.equals("easy")) {    
     System.out.println("You won in" +playGame(10)+ "attempts."); 
     } else if (difficulty.equals("medium")) { 
     System.out.println("You won in" +playGame(100)+ "attempts."); 
     } else if (difficulty.equals("hard")) { 
     System.out.println("You won in" +playGame(1000)+ "attempts."); 
     } 
+0

Danke! Dies hat auch das Problem gelöst! – exceusdoesjava

0

Hier ist eine Lösung, die zeigt, wie einfach es Vermutungen zu beschränken wäre. Nicht viel zusätzliche Mühe oder Gedanke:

package games; 

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

/** 
* HiLo guessing game 
* Created by Michael 
* Creation date 4/9/2016. 
* @link https://stackoverflow.com/questions/36522303/java-creating-hi-low-game-using-multiple-methods-stuck-at-returning-no-of-gu 
*/ 
public class HiLo { 

    public static void main(String [] args) { 
     int maxValue = (args.length > 0) ? Integer.parseInt(args[0]) : 100; 
     int maxGuesses = (args.length > 1) ? Integer.parseInt(args[1]) : 5; 
     Scanner scanner = new Scanner(System.in); 
     String answer = "Y"; 
     do { 
      play(scanner, maxValue, maxGuesses); 
      System.out.println("Play again? [Y/N]: "); 
      answer = scanner.next(); 
      System.out.println(String.format("You answered %s; let's play again!", answer)); 
     } while ("Y".equalsIgnoreCase(answer)); 
    } 

    private static void play(Scanner scanner, int maxValue, int maxGuesses) { 
     int value = new Random().nextInt(maxValue) + 1; 
     int numGuesses = 0; 
     boolean match = false; 
     do { 
      System.out.println(String.format("Guess a value between 1 and %d: ", maxValue)); 
      int guess = Integer.parseInt(scanner.next()); 
      if (guess < value) { 
       System.out.println(String.format("Too low; guess again. (%d guesses left)", (maxGuesses-numGuesses-1))); 
      } else if (guess > value) { 
       System.out.println(String.format("Too high; guess again (%d guesses left)", (maxGuesses-numGuesses-1))); 
      } else { 
       match = true; 
       System.out.println(String.format("You got it right in %d guesses! ", numGuesses+1)); 
       break; 
      } 
     } while (!match && ++numGuesses < maxGuesses); 
     if (!match) { 
      System.out.println(String.format("The correct answer was %d; you're only allowed %d guesses. Better luck next time!", value, maxGuesses)); 
     } 
    } 
} 
+0

Cooles Zeug! Ich bin nur vier Wochen in der Programmierung, und der Kurs, den ich nahm, ging nicht in Sachen wie Parse und Args etc noch, es ist nicht grundlegend von der Schule, die den Kurs anbieten .. Aber großer Dank! Wenn ich mehr lerne, wird das hilfreich sein :) – exceusdoesjava

Verwandte Themen