2013-08-19 3 views
3

Я хочу сделать командную строку, чтобы просто запустить основные команды. До сих пор я сделал это так, чтобы люди могли сказать программе свое имя. Однако, когда я не вхожу в имя, он относится к нему так, как если бы я это делал. Вот мой класс:Создание командной строки, если заявления не работает

public static void main(String args[]) 
     throws IOException 
{ 
    int a = 1; 

    do 
    { 
     System.out.print("$$: "); 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 

     String wtt = null; // wtt = what they typed! 
     wtt = br.readLine(); 

     if(wtt == null) 
     { 
      System.out.println("Why wont you tell me your name!"); 
     } 
     else 
     { 

      System.out.println("Thanks for the name, " + wtt); 
     } 

    } 
    while(a == 1); 
} 

Здесь выход

$$: а

Спасибо за имя, а

$$: отверстие

Спасибо за название, отверстие

$$:

Спасибо за имя,

Почему это не работает?

+3

Возможно, вы получаете пустую строку, но вы проверяете только null. – digitaljoel

+1

Как в стороне, если вам нужно поставить комментарий, объясняющий, почему вы назвали свою переменную так, как вы это делали, вы можете изменить имя переменной на нечто более содержательное и читаемое :) – digitaljoel

ответ

3

использование этого

if (wtt == null || wtt.trim().length() == 0) 
7

Вызов readLine() on a BufferedReader будет возвращать только null на конце ввода. Здесь вход не закончился, вы только что ввели пустую строку, поэтому "" (пустая строка) является результатом.

Вам необходимо будет завершить входной поток, как правило, с помощью Ctrl-C. Затем вы получите "Why wont you tell me your name!". Но тогда вам нужно вырваться из бесконечного цикла.

2

Попробуйте

wtt.length()==0 

вместо проверки на нуль

+1

(На самом деле, вероятно, лучше сделать и то, и другое для 'null' на первом месте) –

+0

Вместо повторного использования колеса используйте Apache Commons Lang [' StringUtils # isEmpty'] (http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/ lang3/StringUtils.html # IsEmpty% 28java.lang.CharSequence% 29) –

2

Это потому, что хотя вы установите строку null на первом, вы затем установить его в br.readLine(), которая будет иметь линию для чтения, даже несмотря на то, пользователь не вводил ничего, прежде чем нажать Enter, поэтому он установит строку в пустую строку.

Вы также должны (или вместо этого) сравнить свою строку с "" (пустая строка), чтобы увидеть, что они ничего не ввели.

1

Вы должны сравнить wtt с "", а чтобы убедиться, что строка не пуста.

if (wtt == null) {

становится

if (wtt == null && !!("".equals(wtt))) {

1

Вместо сравнения WTT обнулить, сравнить его с пустой строкой:

if ("".equals(wtt)) 
{ 
    System.out..... 
} 
1

Readline метод не дает вам конец (например, \ n, \ r). Таким образом, вы не можете ожидать, что цикл выйдет, когда вы нажимаете только вводить, не вводя ничего.Вы можете использовать вместо, чтобы читать символы и определять, был ли новый символ строки или использовать Сканер класс, который мне кажется лучше подходит в вашей ситуации.

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