我不断得到一个超出约束异常的数组

时间:2017-09-15 20:30:27

标签: java arrays string split do-while

我正在尝试创建一个分割字符串的程序,并返回带有3个或更多元音的字符串,并且我不断获得一个超出绑定异常的数组。我不知道如何在方法结束时返回一个数组。

我的程序中哪些问题显然无法解决?

public class SplitWords {

    public static void main(String [] args){
        Scanner scan =  new Scanner(System.in);

        final int MIN_SIZE = 4;
        int size = 0;

        do{

            System.out.println("How many words are you typing(min " + MIN_SIZE + "): ");
            size = scan.nextInt();
        }while(size < MIN_SIZE);
        scan.nextLine();

        String[] myarray = new String[size];
        for(int i = 0; i < myarray.length; i++){
            System.out.println("Type the sentence in the position " + i);
            myarray[i] = scan.nextLine();
        }

        System.out.println("The words which have 3 or more vowels are: " + findVowels(myarray));
    }

    public static String findVowels(String[] myarray){
    for(int i = 0; i < myarray.length; i++){
        String[] tokens = myarray[i].split(" ");
                int count = 0;
                for(int j = 0; j < myarray.length; j++) {
                    if(isVowel(tokens[i].charAt(j))){
                           count++;                     
                    }
                 }
                 if(count > 3){
                  break;
                 }
    }
        return null;
    }

    public static boolean isVowel(char ch){
            switch(ch){
                case 'a':
                    case'e':
                        case'i':
                            case'o':
                                case'u':
                                    case'y':
                                        return true;
            }
            return false;
    }
} 

2 个答案:

答案 0 :(得分:0)

为什么要将字符串拆分为标记?同样调用String [],我猜你要么意味着char []或String,因为你正在做的是创建一个字符串数组,并且像字符串数组一样是单个字符串。只需使用&#34; String&#34;不是&#34;字符串[]&#34;

答案 1 :(得分:0)

这是问题

 for(int j = 0; j < myarray.length; j++) {
                    if(isVowel(tokens[i].charAt(j))){
                           count++;                     
                    }
                 }

分割字符串

 String[] tokens = myarray[i].split(" ");

为什么不使用tokens.length而不是myarray.length,并使用标记[j]而不是我,我是你拥有的字符串数量的计数器。

在集成上述更改后,您的代码应如下所示

public static String findVowels(String[] myarray){

        for(int i = 0; i < myarray.length; i++){

            String[] tokens = myarray[i].split(" ");
                    int count = 0;
                    for(int j = 0; j < tokens.length; j++) {

                        String str = tokens[j];

                        for (int j2 = 0; j2 < str.length(); j2++) {

                            if(isVowel(str.charAt(j2))){
                                   count++;                     
                            }
                             if(count > 3){
                              break;
                             }
                        }

                     }

        }
            return null;
        }

这不会给出任何异常,但我对此代码的逻辑感到非常惊讶,因为无论如何在方法结束时返回null。