2015-07-27 2 views
4

Я только что узнал, что при нажатии ввода в ответ на System.in.read() в буфер консоли помещаются следующие символы: \r\n. Поэтому, когда я ввожу в терминал 1 и нажмите клавишу ввода, компьютер считывает это заявление как 1\r\n. Так не следует ли вызывать System.out.println("hello") дважды? Потому что choice сохранит значение 1. Затем будет напечатан "hello". Затем ignore будет удерживать значение \r. Затем управление будет выдано петли while(ignore != '\n'). Затем ignore будет удерживать значение \n. Затем будет напечатан "hello". А теперь, что ignore = \n, код выйдет из цикла?Проблемы чтения из System.in.read()

class HelpClassDemo { 
    public static void main(String args[]) 
    throws java.io.IOException { 
    char choice, ignore; 

    for(;;) { 
     do { 
     System.out.println("Help on:"); 
     System.out.println(" 1. if"); 
     System.out.println(" 2. switch"); 
     System.out.println(" 3. for"); 
     System.out.println(" 4. while"); 
     System.out.println(" 5. do-while"); 
     System.out.println(" 6. break"); 
     System.out.println(" 7. continue\n"); 
     System.out.print("Choose one (q to quit): "); 

     choice = (char) System.in.read(); 

     do { 
      ignore = (char) System.in.read(); 
      System.out.println("hello"); 
     } while(ignore != '\n'); 
     } while(choice < '1' | choice > '7' & choice != 'q'); 

     if(choice == 'q') break; 
    } 
    } 
} 
+1

где вы узнали об этом? и что заставляет вас думать, что это правда? и когда вы на самом деле пытались и регистрировали значение каждого результата вызова 'read', что вы получили? какой у Вас вопрос? – njzk2

+1

Почему вы используете 'System.in.read()'? Вы должны использовать ['Scanner'] (http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html) – alfasin

ответ

1

Я думаю, будет ли код у \r (возврат каретки), \n (новая линия) или оба \r\n зависит от платформы.

Я запустил ваш код на машине для окон, и он дважды печатал hello.

Возможно, вы захотите проверить используемый вами аппарат и разделитель строк, определенный для этой среды. Пожалуйста, обратитесь к What are the differences between char literals '\n' and '\r' in Java? за дополнительной информацией.

Help on: 
    1. if 
    2. switch 
    3. for 
    4. while 
    5. do-while 
    6. break 
    7. continue 

Choose one (q to quit): 1 
choice1 
hello 
hello 
+0

Большое спасибо! Улыбки! – aejhyun

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