我正在尝试创建一个分割字符串的程序,并返回带有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;
}
}
答案 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。