2015-12-07 2 views
-2

Хорошо, поэтому мой код должен распечатать общее количество введенных слов, самое длинное и кратчайшее слово. Я не могу понять, как заставить его распечатать кратчайшее слово, полное и самое длинное произведение.Я не могу заставить свою программу печатать кратчайшее слово

public void stringInput() 
{ 
    Scanner keyboard = new Scanner(System.in); 
    int wordcount =0; 
    String word =""; 
    String longest = ""; 
    String shortest = ""; 
    while(! word.equals("DONE")) 
    { 
     System.out.print("Please enter a word or DONE to exit: "); 
     word = keyboard.next(); 
     if(!word.equals("DONE")) 
     { 
      wordcount ++; 
      if (word.length() < shortest.length()) 
       { 
       shortest = word; 
       } 
      if (word.length() > longest.length()) 
      { 
       longest = word; 
      } 
     } 
    } 
    System.out.println("Thank you for entering "+wordcount+" words."); 
    System.out.println("Longest word :"+ longest); 
    System.out.println("Shortest word :"+ shortest); 
} 

ответ

3

Ни слова короче "", так shortest никогда не меняется. Одно исправление заключается в том, чтобы установить shortest на первое слово, а не на "". Другим является изменение if, так что он устанавливает shortest, если слово короче, или если длина shortest равна нулю.

Другая возможность:

 if ((wordcount == 1) || (word.length() < shortest.length())) 
     { 
      shortest = word; 
     } 
+0

поэтому я бы просто заменил слово «» словом? – TheCompile

+0

Вы можете исправить его любым из трех способов, которые я предложил (или того, как предложил августокцерар). Замена слова «» словом не будет работать, если вообще нет слов. –

+0

Я смущен, почему вы использовали wordcount, если это просто добавляет общее количество введенных слов? – TheCompile

0

Ни одно слово не будет короче, чем пустая строка. Вы должны установить кратчайший как null и проверить, является ли это первой введенной строкой, если да, установите для нее самое короткое, а затем все остальные строки, которые вы сравниваете с первым. Нравится так:

while(! word.equals("DONE")) 
{ 
    System.out.print("Please enter a word or DONE to exit: "); 
    word = keyboard.next(); 
    if(!word.equals("DONE")) 
    { 
     if(shortest != null){ 
      if (word.length() < shortest.length()) 
      { 
       shortest = word; 
      } 
     }else{ 
      shortest = word; 
     } 
     if (word.length() > longest.length()) 
     { 
      longest = word; 
     } 
     wordcount ++; 
    } 
} 
+0

Я пробовал установить его на нуль, но он не запустил – TheCompile

+0

Но решение не просто установить кратчайшее значение null. Вы должны проверить, является ли строка первой, прежде чем сравнивать. Переход к обновлению моего ответа. – augustoccesar

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