#java
#java
Вопрос:
Я создаю программу, которая может создавать слова в единственном числе во множественном числе, однако я не уверен, как я буду проверять исключения в созданном мной массиве строк. Я знаю, что есть больше исключений, но сейчас я просто хочу получить то, что у меня работает. Я создал метод под названием «checkExceptions», но что бы я поместил в него, чтобы программа сначала проверила этот метод, прежде чем двигаться дальше?
import java.util.Scanner;
public class FormingPlurals {
static final String SENTINEL = "done";
static final Scanner IN = new Scanner(System.in);
static String[] exceptions = {"fish", "fox", "deer", "moose", "sheep", "cattle"};
public static void run() {
while (true) {
System.out.println("Enter a word to make it plural. Enter 'done' to stop: ");
String noun = IN.nextLine();
if (noun.toLowerCase().equals(SENTINEL)) {
System.out.println("Goodbye...");
break;
}
System.out.println(makePlural(noun) " ");
}
}
public static void checkExceptions() {
}
static String makePlural(String singularWord) {
String pluralWord = "";
int length = singularWord.length();
String checker = singularWord.substring(0, singularWord.length() - 1);
char lastLetter = singularWord.charAt(singularWord.length() - 1);
if (length == 1) {
pluralWord = singularWord "'s";
} else
switch (lastLetter) {
case 's':
case 'x':
case 'z':
pluralWord = singularWord "es";
break;
case 'h':
if ((singularWord.charAt(singularWord.length() - 2) == 'c') || (singularWord.charAt(singularWord.length() - 2) == 's')) {
pluralWord = singularWord "es";
break;
}
case 'f':
if (EnglishConsonant(singularWord.charAt(singularWord.length() - 2))) {
pluralWord = checker "ves";
break;
}
case 'y':
if (EnglishConsonant(singularWord.charAt(singularWord.length() - 2))) {
pluralWord = checker "ies";
break;
}
default:
pluralWord = singularWord "s";
break;
}
return pluralWord;
}
public static boolean EnglishConsonant(char ch) {
switch (Character.toLowerCase(ch)) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
return false;
default:
return true;
}
}
public static void main(String[] args) {
run();
}
}
Ответ №1:
Это также можно сделать с помощью массивов, но в этом случае проще использовать map. Вы могли бы создать карту
Map<String,String> irregularPlurals = new HashMap<>();
irregularPlurals.put("sheep","sheep");
irregularPlurals.put("fox","foxes");
Тогда вы могли бы просто использовать методы Map
интерфейса, такие как get()
или containsKey()
, чтобы проверить, имеет ли данное слово неправильную форму множественного числа. Простой способ проверить это тогда был бы:
String irregularPlural = irregularPlurals.get(singularWord);
if (irregularPlural != null){
return irregularPlural ;
}
Кстати, было бы неплохо переименовать методы checkException()
, поскольку в Java исключения и проверяемые исключения являются языковыми понятиями, поэтому читатель может подумать, что этот метод предназначен для обработки исключений Java.
Ответ №2:
Во-первых, я бы поместил массив исключений внутри makePlural
самого себя и обработал его там.
Во-вторых, я бы перешел от наиболее специализированного случая к наименьшему, так что
- Сначала взгляните на исключения слов
- Посмотрите на специальные множественные числа, такие как ‘es’, ‘ves’ и т.д.
- добавьте ‘s’ к слову и верните его
Кроме того, в тот момент, когда я нахожу совпадение либо в исключениях, либо в специальных множественных числах, я бы вычислил и немедленно вернул результат, чтобы предотвратить сопоставление других правил и добавление дополнительных элементов в pluralWord
Если бы мне пришлось использовать функцию для исключений, это было бы
public static boolean isException(String word){
String[] exceptions={"fish", "deer"};
for(int i=0;i<exceptions.length();i ) {
if(exceptions[i].equals(word))
return true;
}
return false;
}
Комментарии:
1. Буду ли я использовать оператор if, который проверял бы, равно ли слово исключениям, или мне понадобится оператор for?
2. Вам нужно и то, и другое: используйте цикл for для перебора каждого элемента массива и используйте if, чтобы проверить, соответствует ли singularWord элементу
3. Я только что обновил свой ответ кодом для поиска по массиву
4. Никаких проблем. пожалуйста, поддержите / примите ответ, если это возможно