2013-12-11 3 views
-1

У меня возникли проблемы с этим методом, я навсегда застрял на «Извините, вы должны указать Deeppan или тонкую основу, попробуйте еще раз:« даже если я нахожу jimmy, harry, deeppan, thin, Thin .. и т. д. После того, как я набрал либо глубокий, либо тонкий, я хочу, чтобы строка хранилась в переменной «размер» и возвращаласьdo while looping forever

Любые идеи, что мне не хватает?

public String Input(){ 


    String size; 

    Scanner sc = new Scanner(System.in); 
    System.out.println("thin or thick: "); 

    do { 
     size = scan.next(); 
     if (!size.equalsIgnoreCase("thick") || !size.equalsIgnoreCase("thin")) { 
      System.out.print("Sorry you must specify a thick or thin base, try again: "); 
     } else { 
      break; 
     } 
    } while (true); 

    return size; 
} 
+1

Он будет продолжаться до тех пор, пока() не будет истинным, но вы установите его всегда как истину. – RealityDysfunction

+0

У него есть оператор break, если условие не оценивается как true, которое должно работать. –

+0

Вы должны использовать отладчик и оценивать два выражения в if. Использование круглых скобок всегда помогает в таких ситуациях, потому что легче читать, какое выражение будет оцениваться первым ... –

ответ

9

Изменить || для & & в условии if. В настоящий момент условие будет истинным, если вы наберете «тонкий», потому что он не глубокий и наоборот.

+2

Это может быть интересно http://en.wikipedia.org/wiki/De_Morgan%27s_laws – Ben

2

while(true) сделает ваш цикл бесконечен, как его всегда истинной

причине вы делаете || операция

+0

Да, вот и все, хорошо поймать. –

2

Причина:

!size.equalsIgnoreCase("Deeppan") || !size.equalsIgnoreCase("thin") 

size не может быть "Deeppan" и «тонкий "в то же время :-)

:

do { 
     size = scan.next(); 
     if (size.equalsIgnoreCase("Deeppan") || size.equalsIgnoreCase("thin")) { 
      break; 
     } 
     else { 
      System.out.print("Sorry you must specify a Deeppan or thin base, try again: "); 
     } 
    } while (true); 

пс. «размер» не является лучшим именем переменной ...

+0

Это также работает. –

5

Заявление внутри вашего if всегда true.

Вы должны использовать либо

!size.equalsIgnoreCase("Deeppan") && !size.equalsIgnoreCase("thin") 

или

!(size.equalsIgnoreCase("Deeppan") || size.equalsIgnoreCase("thin")) 
0

Он всегда будет верным, и, следовательно, никогда не достигают else

Пример 1: Размер "Deeppan":
! size.equalsIgnoreCase ("Deeppan") || ! size.equalsIgnoreCase ("thin")
=! true || ! false
= false || правда
= истинный

Пример 2: Размер "Foo":
size.equalsIgnoreCase ("Deeppan") || ! size.equalsIgnoreCase ("thin")
=! false || ! false
= true || правда
= истинный

1

Нет причин использовать do-while, попробуйте while, как это, проверка состояние становится более простым:

while (true) { 
    size = scan.next(); 
    if (size.equalsIgnoreCase("deeppan") || size.equalsIgnoreCase("thin")) 
     return size; 
    System.out.println("Sorry you must specify a Deeppan or Thin base, try again:"); 
} 
0

Yuor заявление

если (size.equalsIgnoreCase ("! Deeppan ") ||! Size.equalsIgnoreCase (" тонкий "))

всегда прав.