2014-11-20 3 views
0

Я пытаюсь следующие switch заявления с использованием System.in.read():использование системы Java читать заявления переключателя

char ch1, ch2; 

    ch1 = (char) System.in.read(); 
    switch(ch1) { 
     case 'A': 
      System.out.println("This A is part of outer switch."); 
      ch2 = (char) System.in.read(); 
//    ch2 = 'A'; 
      switch(ch2) { 
       case 'A': 
        System.out.println("This A is part of inner switch"); 
        break; 
       case 'B': 
        System.out.println("This B is part of inner switch"); 
        break; 
      } // end of inner switch 
      break; 
     case 'B': // ... 

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

не кажется, должна быть выполнена, и, если явно не оговорено ch2 = 'A', внутренние switch заявления не будет быть казненным. Итак, как сделать вторую работу read()?

+1

Что произойдет, если у вас есть что-то, что печатает значение ch2? Что он говорит? – CBredlow

+0

Байты не являются символами. Пожалуйста, используйте отладчик, или если вы совершенно незнакомы с ними, распечатывайте заявления по всему вашему коду для отладки. –

ответ

2

Хорошо, пришлось поэкспериментировать, но я уверен, вы входите в игру после ввода первого символа? Если вы, то ch2 устанавливается на это нажатие клавиши.

Что вы можете сделать, это сообщить входному потоку, чтобы пропустить это, перейдя System.in.skip(1) сразу после получения первого символа. Тогда вызов set ch2 будет работать отлично. Вероятно, есть много лучших способов прочитать ввод, но поскольку каждый раз, когда вы вводите символ, вы вводите два, и вам нужно пропустить последний.

Так повторить:

ch1 = (char) System.in.read(); 
System.in.skip(1);//Skip the next keystroke, which is enter 
switch(ch1) { 
    case 'A': 
     System.out.println("This A is part of outer switch."); 
     ch2 = (char) System.in.read(); 
//    ch2 = 'A'; 
     switch(ch2) {