在数组中打印元音的Java程序?

在数组中打印元音的Java程序?,java,return,return-value,Java,Return,Return Value,我正在编写一个程序来查找数组中每个单词的元音数。我已经完成了代码,我只是不确定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

我正在编写一个程序来查找数组中每个单词的元音数。我已经完成了代码,我只是不确定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;
    }
}
公共静态int元音(char[]数组,int x,int y){
如果(数组[x]='a'| |数组[x]='e'| |数组[x]='i'| |数组[x]='o'| |
数组[x]='u'| |数组[x]='y'){
y++;
}
如果(x而不是

vowels (array, x, y);
return ???;
您应该返回由元音计算的值,因为它是一个干净的函数,并且没有副作用:

return vowels (array, x, y);

在这里使用递归是一个非常丑陋的解决方案。如果您将其改写为:

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;
}
公共静态int元音(char[]数组,int x){
int y=0;
如果(数组[x]='a'| |数组[x]='e'| |数组[x]='i'| |数组[x]='o'||
数组[x]='u'| |数组[x]='y')
y++;
if(x
如果我理解正确-

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;
    }
  • 首先,我要准备一张元音图
  • 其次,我将迭代我的数组并检查每个元素是否 它们存在于地图中。如果存在,请更新计数器。否则, 继续检查其他元素
示例代码:

Map元音=新HashMap(){
{
放(a)字;
放("e",");;
把(“我”、“我”);
放("o",");;
放(u)字;
把(“y”,放在“);
}
};
字符串输入=“blabla”;
int计数器=0;
对于(int i=0;i
以下是该程序的解决方案-

公开课{ 公共静态void main(字符串[]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++;
    }
请注意,in x应该小于array.length-1,因为它的值正在递增。否则它将抛出索引越界异常

    if (x < (array.length-1)) {
        x++;
        return vowels (array, x, y);

    } else {
        return y;
    }
    //return -1;
   }
}
if(x<(数组长度-1)){
x++;
返回元音(数组,x,y);
}否则{
返回y;
}
//返回-1;
}
}

干杯,

+1感谢您尝试递归。我认为返回y应该可以。尝试一下,然后告诉我们
y
的含义是什么?因为答案很明显,这似乎是学习递归的一项任务。因此,我建议您尝试完全自己编写此函数,并请您的导师而不是stackoverflow。然后为什么不使用HashSet。。. :?
    if (x < (array.length-1)) {
        x++;
        return vowels (array, x, y);

    } else {
        return y;
    }
    //return -1;
   }
}