2015-08-30 3 views
0

Привет, это мой первый пост здесь, и у меня есть проблема:Java Scanner игнорирует ответ

У меня есть программа, в которой, в какой-то момент, запрашивает у пользователя, если он хочет поделиться звезды, и если он якобы делает , программа возвращается к их сбору, и через некоторое время возвращается к вопросу, если он хочет поделиться ими снова.

Проблема заключается в том, что, когда пользователь возвращается к этой точке, программа игнорирует любой ответ, который он дает, и переходит к блоку ответов «else».

Это выглядит следующим образом:

"Do you want to share your stars? 

yes 

Please answer with yes or no" 

Код:

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

public class App { 
static Scanner skan = new Scanner(System.in); 
static int starCount = 0; 
static Random random = new Random(); 

public static void main(String[] args) { 
    starReaching(); 

} 

static void starReaching() { 
    boolean starCollected = false; 
    int i = 0; 
    int j = random.nextInt(101); 

    while (i < j) { 
     i++; 
     System.out.println("Stars are out of reach"); 
    } 
    if (i > j || i == j) { 
     starCollected = true; 
    } 
    if (starCollected == true) { 
     starCollector(); 
    } 
} 

static void starCollector() { 
    System.out.println("You caught a star !"); 
    starCount++; 
    if (starCount == 10) { 
     System.out.println("You have 10 stars ! :)"); 
     System.out.println("Do you want to share your stars?"); 
     String line = skan.nextLine(); 
     if (line.equals("yes")) { 
      skan.reset(); 
      starGiver(); 
     } else if (line.equals("no")) { 
      wishMaker(); 
     } else { 
      System.out.println("Please answer with yes or no"); 
      System.exit(0); 
     } 
    } else { 
     starReaching(); 
    } 
} 

static void starGiver() { 
    System.out.println("How many do you want to share?"); 
    int starsToShare = skan.nextInt(); 
    if (starsToShare < 10 || starsToShare == 10 && starsToShare > 0) { 
     starCount = starCount - starsToShare; 
     System.out.println("Stars shared !"); 
     System.out.println("You now have " + starCount + " stars"); 
     System.out.println("Go collect them again!"); 
     starReaching(); 
    } else if (starsToShare > 10) { 
     System.out.println("You don't have enough stars to share that much!"); 
     starGiver(); 
    } else { 
     System.out.println("That's not a valid option"); 
     starGiver(); 
    } 
} 

static void wishMaker() { 

} 

} 

ответ

1

Каждый раз, когда вы звоните skan.nextLine() вы читаете новую строку и продвигать указатель сканера, и это является причиной вашего кода не работает: вы слишком часто вызываете это.

Вместо

if (skan.nextLine().equals("yes")) { 
    skan.reset(); 
    starGiver(); 
} else if (skan.nextLine().equals("no")) { 
    wishMaker(); 
} else { 

сделать:

String line = scan.nextLine(); // read from Scanner **once** only 
if (line.equals("yes")) { 
    skan.reset(); 
    starGiver(); 
} else if (line.equals("no")) { 
    wishMaker(); 
} else { 
+0

после смены на 'String line = skan.nextLine(); \t \t \t если (line.equals ("да")) { \t \t \t \t skan.reset(); \t \t \t \t звездаGiver(); \t \t \t} еще если (line.equals ("нет")) { \t \t \t \t wishMaker();? ' сообщение теперь «вы хотите поделиться звезды Do Пожалуйста ответить да или no " так что теперь он доцент даже ждет ввода – Selvidian

+0

@Selvidian: У вас другие проблемы с кодом, скорее всего, в коде не отображается. Вы вызываете какие-либо другие методы сканера, кроме 'nextLine()'? –

+0

Я отправил весь код – Selvidian

0

Хорошо я нашел маленький мудак, я использовал skan.nextInt без использования skan.nextLine после этого, спасибо за быстрый help, much love