2015-05-24 2 views
1

Я написал цикл, но он не работает. Он должен спросить меня 4 раза за a и за каждые a он должен писать цифры от 0 до 3. Но после запроса он пишет два числа. Где ошибка?Java loop for double working

Мой код

package hra1; 

public class Hra1 { 

    public static void main(String args[]) throws java.io.IOException 
    { 
     char a; 
     int i; 

     for (i = 0; i < 4; i++) 
     { 
      a = (char) System.in.read();    
      System.out.println(i); 
     } 
    } 
} 

Вот пример вывода:

l 
0 
1 
l 
2 
3 
+0

Чтение персонажа не заставляет компьютер «просить» что-то. Вы просто печатаете целые числа 0, 1, 2, 3 - что за сюрприз? – laune

ответ

1

При вводе одного символа, а затем нажмите клавишу ввода (< - |), система обеспечивает два символов вашей программы; поэтому 0 и 1 печатаются после ввода первых «l» и 2 и 3 после ввода второго «l».

Вы можете распечатать элемент кода прочитанного символа, например,

for (int i = 0; i < 4; i++){ 
    char a = (char) System.in.read(); 
    System.out.println(Character.getNumericValue(a)); 
} 

в петле, чтобы увидеть, что происходит.

0

введите ключ -> «\ п»
Таким образом, ваш вход 1 \ п

0

Вы фактически обеспечивая два входа, которые в настоящее время для чтения при вводе номера в терминале. Во-первых, ваше целое число (например, «1»), а затем символ новой строки («\ n»), когда вы нажимаете клавишу ввода.

Другой способ добиться того, что вы хотите использовать Scanner класс, например, так:

package hra1; 

public class Hra1 { 

    public static void main(String args[]) 
     throws java.io.IOException 
    { 
     int i; 

     Scanner scanner = new Scanner(System.in); 

     for (i = 0; i < 4; i++) 
     { 
      // Scan the next token of input as an integer 
      int a = scanner.nextInt(); 

      System.out.println(i); 
     } 

    } 
} 
0

System.in является InputStream - читать() читает ровно один байт. Ваш прямой ввод более одного байта, поэтому оба значения напрямую считываются в первом входе. Программа попытается снова запустить цикл for, чтобы прочитать следующий байт ввода. Вот почему, когда вы вводите ввод более 1 байт, система пытается прочитать остальные байты и system.out.println будет выполняться более 1 раза.

1

Ваш код также читает newline character('\n'), так как вы нажимаете enter key('\n') после каждого input ('1', '2', '3' и т. Д.).

Если вы наберете один символ и нажмите клавишу ввода, System.in.read() будет читать два символа, так как он также читает символ новой строки.

Повторно учтен ваш код. Введите все значения в одну строку (не нажимайте клавишу ввода до тех пор, пока не введите все значения). Это решит вашу проблему.

for (i = 0; i < 4; i++) 
{ 
     a = (char)System.in.read(); 

     System.out.println(a); 
} 

вход 4567

Выход

Код ссылки ideone здесь http://ideone.com/IYcjyX. Надеюсь, поможет.