2015-03-02 4 views
1

Я довольно новичок в Java, и я пытаюсь написать небольшую программу, которая просит пользователя ввести целое число от 0 до 4. Я написал это до сих пор, но, похоже, это не работает! Может ли кто-нибудь сказать мне, где я ошибаюсь?Как я могу прочитать число между двумя цифрами?

import java.util.Scanner; 
public class GameCharSelect { 

    public static void main(String[] argh){ 
     int myChar; 
     Scanner in = new Scanner(System.in); 
     { 
      System.out.print("choose a player: "); 
      myChar = in.nextInt(); 
     }while(myChar>0 && myChar<4); 

     System.out.println("--------"); 
     System.out.println("you chose "+ myChar); 

    } 

} 

Теперь я хочу, чтобы число было 1,2 или 3, или иначе это цикл до ввода данных пользователя одного из них, но программы не принимает любое число на данный момент. Где я ошибаюсь?

ответ

1

Ваше несоответствие является неправильным.
Вы проверяете, больше ли char, чем 0 И ниже 4, и если да, то он будет делать цикл снова, в то время как то, что вам нужно, - это oposite.
Измените оператор, чтобы проверить, если MyChar меньше 1 ИЛИ выше 3.
myChar < 1 || myChar > 3

Вы также отсутствует do в начале do-while.

+0

спасибо за помощь ... вы почти правы ... но условие должно было быть (myChar <= 0 || myChar> = 4). но в любом случае ... я искал способ решить проблему, и цифры не важны, так что проголосуйте и спасибо – Ali

+1

Нет: 'myChar <= 0' означает меньше или равно нулю,' myChar> = 4' означает больше или равно четырем. Вы сказали в вопросе: «Теперь я хочу, чтобы число было 1,2 или 3 ...». Так что 0 и 4 не должны включаться. Из представленных вами спецификаций, мой ответ правильный. – Jite

+0

oh yea ... thats right ... my bad ... lol простите за то, что после этого мне пришлось изменить числа от 0,1, 2,3,4, почему. в любом случае ... спасибо большое mate – Ali

-1

Ваш цикл должен выглядеть

while (true) { 
    System.out.print("Choose a player: "); 
    myChar = in.nextInt(); 
    if (myChar > 0 && myChar < 4) { 
     break; // out of the loop 
    } 
} 

То есть вы только break; из него, если отсканированное значение либо 1, 2 или 3.


@Ali, while(true) подход отлично. На самом деле, гораздо чаще их видеть, чем do-while() в фактическом коде, который там работает. Получаемый результат субъективен и основан на предпочтении индивидуального стиля кодирования, а не на указании правильности ответа.

+0

Никогда Бесконечный цикл с разрывом. Когда вы можете иметь нормальное условие прерывания – pL4Gu33

+1

@ pL4Gu33 Чисто вопрос стиля, поскольку 'nextInt()' является блокирующим вызовом здесь. –

+0

Да, но я думаю, что это неправильный способ сделать это. Используйте do .. в то время как намного лучше, потому что «нормальное состояние», и вы должны идти через него. – pL4Gu33

3

Вам не хватает ключевое слово в вашей очереди. Также ваше условное обозначение должно быть отменено:

public static void main(String[] argh) { 
    int myChar; 
    Scanner in = new Scanner(System.in); 
    do { 
     System.out.print("choose a player: "); 
     myChar = in.nextInt(); 
    } while (myChar <= 0 || myChar >= 4); 

    System.out.println("--------"); 
    System.out.println("you chose " + myChar); 

} 
+0

я удаляю свой комментарий, вы правы, я перепробовал между: – pL4Gu33

+0

@nomis: да, я заметил часть «do» после того, как я отправил свой вопрос, но состояние меня убило. огромное спасибо. – Ali

+0

@ pL4Gu33: lol ... спасибо anyways – Ali

1

Вы HAF две проблемы в вашем коде:

  • Вы помещаете время в неправильном направлении, вы должны положить делать-то время как заявление или положить в то время как перед {...}.
  • Вы также хотите запустить цикл, когда вы помещаете неправильный номер (< 1 или> 3), а не когда вы помещаете правильный номер (от 1 до 3) ... Так что вам также нужно изменить выражение.

Мой код будет выглядеть примерно так:

import java.util.Scanner; 
public class GameCharSelect { 

    public static void main(String[] argh){ 
     int myChar; 
     Scanner in = new Scanner(System.in); 
     do{ 
      System.out.print("choose a player: "); 
      myChar = in.nextInt(); 
     } while(myChar<1 || myChar>3); 

     System.out.println("--------"); 
     System.out.println("you chose "+ myChar); 

    } 

} 
Смежные вопросы