Java .nextLine() repeats line -


everything of guessing game alright, when gets part of asking user if he/she wants play again, repeats question twice. found out if change input method nextline() next(), doesn't repeat question. why that?

here input , output:

i'm guessing number between 1-10 guess? 5 wrong. 3 want play again? (y/n) want play again? (y/n) n 

here code:(it in java) last while loop block part asks user if he/she wants play again.

import java.util.scanner;  public class guessinggame  {        public static void main(string[] args)     {         scanner input = new scanner(system.in);         boolean keepplaying = true;          system.out.println("welcome guessing game!");          while (keepplaying) {             boolean validinput = true;             int guess, number;             string answer;              number = (int) (math.random() * 10) + 1;             system.out.println("i'm guessing number between 1-10");             system.out.print("what guess? ");             {                 validinput = true;                 guess = input.nextint();                 if (guess < 1 || guess > 10) {                     validinput = false;                     system.out.print("that not valid input, " +                             "guess again: ");                 }             } while(!validinput);             if (guess == number)                 system.out.println("you guessed correct!");             if (guess != number)                 system.out.println("you wrong. " + number);             {                 validinput = true;                 system.out.print("do want play again? (y/n) ");                 answer = input.nextline();                 if (answer.equalsignorecase("y"))                     keepplaying = true;                 else if (answer.equalsignorecase("n"))                     keepplaying = false;                 else                     validinput = false;             } while (!validinput);         }     } } 

in do while loop, don't want nextline(), want next().

so change this:

answer = input.nextline(); 

to this:

answer = input.next(); 

note, others have suggested, convert while loop. reason do while loops used when need execute loop @ least once, don't know how need execute it. whilst it's doable in case, suffice:

system.out.println("do want play again? (y/n) "); answer = input.next(); while (!answer.equalsignorecase("y") && !answer.equalsignorecase("n")) {     system.out.println("that not valid input. please enter again");     answer = input.next(); }  if (answer.equalsignorecase("n"))     keepplaying = false; 

the while loop keeps looping long "y" or "n" (ignoring case) isn't entered. is, loop ends. if conditional changes keepplaying value if necessary, otherwise nothing happens , outer while loop executes again (thus restarting program).

edit: explains why original code didn't work

i should add, reason original statement didn't work because of first do while loop. in it, use:

guess = input.nextint(); 

this reads number off line, not return of line, meaning when use:

answer = input.nextline(); 

it detects leftover carriage nextint() statement. if don't want use solution of reading next() swallow leftover doing this:

guess = input.nextint(); input.nextline(); rest of code normal... 

Comments

Popular posts from this blog

Detect support for Shoutcast ICY MP3 without navigator.userAgent in Firefox? -

web - SVG not rendering properly in Firefox -

visual studio - TFS will not accept changes I've made to a Java project -