Member 13769403 Ответов: 2

Java передает три цикла одновременно вместо одного


С Дж
0
1
2

О
3
4
5

С

Его вывод выделен жирным шрифтом.

Что я уже пробовал:

class loops2{
	public static void main(String args[])
	throws java.io.IOException{
		int i;
		System.out.println("S");
		for(i=0;(char)System.in.read()!='S';i++)
			System.out.println(i);
	}
}

2 Ответов

Рейтинг:
17

CPallini

Это происходит потому, что входные данные представляют собой последовательность символов (например, 'S','\r', '\n' на Windows). пробовать

class InputSequence
{
  public static void main(String args[])
  throws java.io.IOException{
    int i;
    System.out.println("S");
    char c;
    for(i=0;(c = (char)System.in.read()) !='S';i++)
    {
      System.out.printf("char[%d] = %d\n", i, (int)c);
    }
  }
}


Maciej Los

5ed!

CPallini

Спасибо тебе, Мацей!

Рейтинг:
10

Richard MacCutchan

System.in.read() возвращает следующий байт/символ из входного потока. Когда вы вводите свой ввод, вы вводите букву, за которой следует клавиша enter. Это приводит к трем символам в потоке:
1. буква, которую вы печатаете
2. Символ возврата каретки
3. Символ новой строки
Вы можете проверить это довольно легко, напечатав каждое считываемое значение.


Maciej Los

5ed!