Из вашего кода можно многому научиться.
При возврате логического выражения
Вот улучшенная версия isVowel(char ch)
:
public boolean isVowel(char ch) {
ch = Character.toLowerCase(ch);
return (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u')
}
Примечаниездесь две вещи:
ch
упрощен до строчной формы, поэтому у вас гораздо меньше проверок - Нет оператора
if
.
Здесь есть важный урок: вы никогда не должны писать что-то вроде этого:
if (expression) {
return true;
} else {
return false;
}
Вместо этого вы всегда должны писать:
return expression;
Это намного, намного понятнее.
Ознакомившись с библиотекой Java
Обратите внимание на использование Character.toLowerCase
в приведенном выше коде.Фактически, можно сделать код еще проще с помощью, например, String.indexOf
:
public boolean isVowel(char ch) {
return "aeiouAEIOU".contains("" + ch);
}
Это использует String.contains
, используя конкатенацию строк дляэффективно преобразовать char
в String
(что implements CharSequence
).
API-ссылка
См. также
Не сравнивайте с логическими константами
Новички, как правило, пишут что-то вроде этого:
if (expression1 == false) {
}
//...
if (expression2 == true) {
}
Особенно в Java вывместо этого следует научиться писать так:
if (!expression1) {
}
//...
if (expression2) {
}
Это намного понятнее и гораздо менее подвержено ошибкам.
См. также
При итерации по каждому символу String
Вот простой цикл, чтобы показать, как индексируется способ сделать это:
String s = "Abracadabra";
for (int i = 0; i < s.length(); i++) {
System.out.print("[" + s.charAt(i) + "]");
} // prints "[A][b][r][a][c][a][d][a][b][r][a]"
При этом используются length()
и charAt(int index)
методы String
.
В качестве альтернативы, если вы этого не сделаетеЕсли вам нужен индекс, вы также можете использовать String.toCharArray()
, чтобы вместо этого сделать foreach для char[]
.Это не экономит место (char[]
должен быть заново выделен, чтобы гарантировать неизменность), но очень читабельно и кратко:
String s = "Abracadabra";
for (char ch : s.toCharArray()) {
System.out.print("[" + ch + "]");
} // prints "[A][b][r][a][c][a][d][a][b][r][a]"
См. Также
О процессе разработки программного обеспечения
Как уже упоминали другие, ваш метод run
очень проблематичен: в настоящее время он приводит к бесконечному циклу.
Вместо этого вы могли бы сделать следующее:напишите так называемые " заглушки методов " для isVowel
(например, просто return true;
) и shorthand
(например, просто return "";
).Они еще не верны, но важно то, что они сейчас компилируются.Это дает вам время сосредоточиться на run
, чтобы убедиться, что у вас есть правильно работающий цикл и что вы можете извлечь соответствующий ввод от пользователя.Вы должны довести код до точки его компиляции и запуска, чтобы вы могли проверить и быть уверенными, что ваш run
делает то, что ему нужно.В этот момент вы можете начать заполнять ранее озвученные методы, применяя при необходимости соответствующие функциональные возможности.
Если у вас возникают трудности с достижением этого, вы можете задать вопросы об этом конкретном аспекте домашней работы (носначала найдите его в stackoverflow!).Это дает вам качественные и сфокусированные ответы на проблемы по мере их возникновения (в отличие от написания такого проблемного кода, чтобы люди могли его использовать повсюду), и поэтому более поучителен для вас.
Этот вопрос также, вероятно, будет более полезным для других, поскольку он более общий по контексту (т.е. речь идет о том, как написать цикл подсказок для пользователя, а не о том, как выполнять домашнюю работу) (напротив, этот вопрос в настоящее время называется public String shorthand(String in)
).
Еще одна вещь, которую вы можете сделать, это выполнить так называемые модульные тесты . isVowel
является БОЛЬШИМ кандидатом на это: чтобы проверить его правильность, вам нужно знать, как его вызывать (то, с чем у вас, очевидно, возникают проблемы).
Поначалу все это кажется ненужной работой. Предположительно, юнит-тесты не являются частью домашней работы (хотя, вероятно, так и должно быть), и написание заглушек, а затем замена их чем-то другим кажется пустой тратой времени, и вместо этого вы должны просто сделать это правильно с первого раза. Именно потому, что это домашнее задание, вы должны принять и практиковать методологии хорошего процесса разработки программного обеспечения. Это для вашего же блага.
Смотри также