Как найти самое короткое слово в строке Java без использования массивов?

Я пытаюсь использовать тот же формат этого кода, который я использовал в учебнике. Он напечатает самое длинное слово, а также длину самого длинного слова. Преподаватель сказал мне, что, чтобы найти самое короткое слово, мне нужно перевернуть оператор if, чтобы он был меньше ('<'), а не больше ... однако, после ввода любой строки, когда я запускаю программу, она возвращает:

"Самое короткое слово:" ", длина: 0"

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

Scanner in = new Scanner(System.in);

System.out.println("Please enter a phrase: ");
String phrase = in.nextLine();


String w = "";
String lw = "";       
int l;
char ch;


phrase = phrase + " ";
l = phrase.length();
int i;
for (i=0; i < l; i++) {
    ch = phrase.charAt(i);
    if(ch != ' ') {
        w = w + ch;
    } else {
        if(w.length() > lw.length()) {
            lw = w;
        }
        w = "";
    }
}

System.out.println("Longest Word: "" + lw + "", length: "+ lw.length());

Всего 1 ответ


Одна вещь, которую вы должны сделать, это изменить

if(w.length() > lw.length())

в

if(w.length() < lw.length())

Однако этого недостаточно, поскольку lw инициализируется пустой String , поэтому условие всегда будет false ( w.length() никогда не будет <0).

Поэтому вы также должны проверить, является ли lw еще пустым:

if(w.length() < lw.length() || lw.isEmpty ()) {
    lw = w;
}

Полный код:

Scanner in = new Scanner(System.in);

System.out.println("Please enter a phrase: ");
String phrase = in.nextLine();

String w = "";
String lw = "";       
int l;
char ch;

phrase = phrase + " ";
l = phrase.length();
int i;
for (i=0; i < l; i++) {
    ch = phrase.charAt(i);
    if(ch != ' ') {
        w = w + ch;
    } else {
        if(w.length() < lw.length() || lw.isEmpty ()) {
            lw = w;
        }
        w = "";
    }
}

System.out.println("Shortest Word: "" + lw + "", length: "+ lw.length());

Есть идеи?

10000