Java программа для печати гласных в массиве?
Я пишу программу, чтобы найти количество гласных в каждом слове в массиве. Я закончил код, я просто не уверен, что возвращаемое значение должно выглядеть после оператора if.
public static int vowels(char [] array, int x, int y) {
if(array[x]=='a' || array[x]=='e' || array[x]=='i' || array[x]=='o' ||
array[x]=='u' || array[x]=='y') {
y++;
}
if (x < array.length) {
x++;
vowels (array, x, y);
return ???;
} else {
return y;
}
}
5 ответов
Вместо
vowels (array, x, y);
return ???;
Вы должны вернуть значение, вычисленное гласными, поскольку оно является чистой функцией и не имеет побочных эффектов:
return vowels (array, x, y);
Если я вас правильно понимаю,
private static String vowelString = new String("aeiou");
public static int vowels(char [] array) {
int x=0;
for(char ch:array) {
if(vowelString.indexOf(ch)>=0)
x++;
}
return x;
}
Использование рекурсии здесь очень уродливо. Было бы намного проще, если бы вы переписали это так:
public static int vowels(char[] array) {
int y = 0;
for (char x : array) {
if (x == 'a' || x == 'e' || x == 'i' || x == 'o' || x == 'u' || x == 'y')
y++;
}
return y;
}
Но если вам действительно нужно использовать рекурсию (например, это ваша домашняя работа, и вы должны ее использовать), то вам нужно исправить некоторые ошибки в своем коде и удалить y
аргумент - это ненужно
public static int vowels(char[] array, int x) {
int y = 0;
if (array[x] == 'a' || array[x] == 'e' || array[x] == 'i' || array[x] == 'o' ||
array[x] == 'u' || array[x] == 'y')
y++;
if (x < array.length - 1) {
x++;
y += vowels(array, x);
}
return y;
}
Вот решение для программы -
public class so {public static void main (String [] args) {// TODO Автоматически сгенерированная заглушка метода
char array[] = {'a', 'e', 'i', 'x', 'h', 't', 'd' };
System.out.print( vowels(array, 0, 0));
}
public static int vowels(char [] array, int x, int y) {
if(array[x]=='a' || array[x]=='e' || array[x]=='i' || array[x]=='o' ||
array[x]=='u' || array[x]=='y') {
y++;
}
Обратите внимание, что в x должно быть меньше, чем array.length-1, так как его значение увеличивается. В противном случае он выдаст исключение за пределами индекса.
if (x < (array.length-1)) {
x++;
return vowels (array, x, y);
} else {
return y;
}
//return -1;
}
}
Ура,
- Сначала я подготовил бы карту гласных.
- Во-вторых, я бы перебрал свой массив и проверил, есть ли каждый элемент на карте. Если они существуют, обновите счетчик. В противном случае продолжайте проверять другие элементы.
Образец кода:
Map<String, String> vowels = new HashMap<String, String>() {
{
put("a", "");
put("e", "");
put("i", "");
put("o", "");
put("u", "");
put("y", "");
}
};
String input = "blablabla";
int counter = 0;
for (int i = 0; i < input.length(); i++) {
if (vowels.containsKey(input.charAt(i) + ""))
counter++;
}