Я пытаюсь использовать тот же формат этого кода, который я использовал в учебнике. Он напечатает самое длинное слово, а также длину самого длинного слова. Преподаватель сказал мне, что, чтобы найти самое короткое слово, мне нужно перевернуть оператор 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());