Gå til innhold

Anbefalte innlegg

Oppgaven var først å lage en metode getInt som ikke skal returnere før et heltall er skrevet inn. Jeg testet metoden og den fungerte fint. Neste oppgave var så å "implementere" denne i en oppgave fra tidligere. Jeg klippet og limte inn, men jeg får kun error?

 

Slik skal et spill egentlig se ut:

 

Guess number: 5
Higher!
Guess number: 50
Lower!
Guess number: 23
Higher!
........
........
........

 

Slik ser det ut; den tar imot et tall, sjekker om det skal være lavere eller høyere, dermed skriver den ut "Guess number:" 2 ganger og så en error.

 

Guess number: 5
Higher!
Guess number: Guess number: Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Unknown Source)
at forelesning.Oppgave03.getInt(Oppgave03.java:65)
at forelesning.Oppgave03.main(Oppgave03.java:21)

 

package forelesning;


import java.util.*;

public class Oppgave03 {



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

 // Declare necessary varibales
 int numGames = 0, totGuesses = 0;
 boolean newGame = true;

 while(newGame) {
  // Declare necessary varibales
  int correct = (int) (Math.random() * 100) + 1;
  int guess = 0, numGuesses = 0;

  // Play game until correct number is guessed
  while(guess != correct) {
guess = getInt("Guess number: ");
if(correct < guess) {
 System.out.println("Lower!");
} else if(correct > guess) {
 System.out.println("Higher!");
}
numGuesses++;
  }

  // Game finishes, output results
  System.out.println();
  System.out.println("Congratulations, you guessed the correct number!");
  System.out.println("Number of guesses: " + numGuesses);
  System.out.println();
  System.out.println("------------------------------------------------");
  System.out.println();

  // Keep playing?
  System.out.print("Play again? (y): ");
  in.nextLine();
  if(!in.nextLine().equalsIgnoreCase("y")) newGame = false;
  numGames++;
  totGuesses += numGuesses;
  System.out.println();
  System.out.println("------------------------------------------------");
 }
 in.close();

 // Output stats after quit
 System.out.println();
 System.out.println("Game finished!");
 System.out.println();
 System.out.println("Statistics");
 System.out.println("Games played: " + numGames);
 System.out.println("Total guesses: " + totGuesses);
 System.out.println("Average number of guesses: " + (double) totGuesses / numGames);
}


public static int getInt(String message) {
 Scanner in2 = new Scanner(System.in);
 System.out.print(message);
 while(!in2.hasNextInt()) {
  System.out.print(message);
  in2.nextLine();
 }
 int n = in2.nextInt();
 in2.close();

 return n;
}


}

Lenke til kommentar
Videoannonse
Annonse

Hvorfor ikke bare ha én scanner til alt?

Virker tungvindt å opprette og stenge en hver gang et nytt tall skal leses inn.

 

Om du fjerner in2.close(), så vil du ikke lenger få den samme feilen.

Endret av Fred7555
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...