2015-06-04 2 views
0

Я пытаюсь использовать цикл сканера как метод в своем классе ввода в моем основном методе. Я получаю эту ошибку:Использование цикла сканера по классам (Java)

Exception in thread "main" java.lang.NullPointerException 
at Blackjack.Input.getBet(Input.java:27) 
at Blackjack.BlackJackGame.main(BlackJackGame.java:23) 

Вот цикл (этот цикл в отдельном классе):

public int getBet(int cash) { 
    Scanner sc = new Scanner(System.in); 
    int bet = sc.nextInt(); 
     while (bet > cash) { 
      outputter.cannotBet(); 
      outputter.askBet(); 
      bet=sc.nextInt(); 
     } 
    return bet; 
} 

А вот где я называю это в моем основном методе:

user.setBet(input.getBet(user.getCash())); 

В принципе, пользователю не разрешается делать больше денег, чем он или она, и в то время как ставка больше, чем наличные деньги, которые он или она имеет, она должна зациклиться и попросить пользователя повторно ввести номер. Буду признателен за любую оказанную помощь.

+2

Где «выдан» присвоено значение? – pathfinderelite

+0

Вывод - это отдельный класс, который просто печатает строки на консоли – Jared

+0

Какая строка Input.java:27? –

ответ

0

Я сделал это более проще. Пожалуйста, попробуйте это. Я удалил из моего кода другие неизвестные методы.

Scanner sc = new Scanner(System.in); 
    int bet = 0; 
    do { 
      bet=sc.nextInt(); 
    } while (bet > cash); 

    return bet; 

Скажите, передаете ли вы наличные деньги как 100, тогда вы набрали 200 в качестве ставки, он снова запросит ввод. Если ставка равна 20, тогда условие false и возвращает значение. Надеюсь, это поможет вам.

+0

единственное, что наличные деньги> 0, так что бы это не пропустить цикл в первую очередь? должен ли я просто инициализировать ставку как действительно большое количество? – Jared

+0

Согласно вашей программе, ставка поступает из System.in означает консоль. Итак, вы можете что-то ценное, чего хотите ... 10000 или что-то в этом роде. Если вы хотите действительно огромную ценность, сделайте ее «длинной» –

+0

! благодаря – Jared

0

попробовать заменить этот

public int getBet(int cash) { 
Scanner sc = new Scanner(System.in); 
int bet = sc.nextInt(); 
    while (bet > cash) { 
     outputter.cannotBet(); 
     outputter.askBet(); 
     bet=sc.nextInt(); 
    } 
return bet; 
} 

с этим

public int getBet(int cash) { 

Scanner sc = new Scanner(System.in); 
    int bet = 0;//or you could put this as a global variable, but its considered "bad practise" 
    while (bet > cash) { 
     bet = sc.nextInt(); 
     outputter.cannotBet(); 
     outputter.askBet(); 
     continue; 
    } 
return bet; 
} 

Надеется, что это помогает

+0

, почему вам нужно продолжить; там?? –

+0

он сбрасывает цикл while, и вам это нужно, потому что u перезапустил весь ваш метод с переменной, установленной в методе << не работает. следовательно, команда continue перезапускает цикл, а не весь ваш метод – Mazino

+0

, если я это сделаю, где мне нужно инициализировать ставку int? – Jared