import java.util.Scanner;
class piglatin{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("enter a string");
String s=in.nextLine(),n1="",n2="",n3="";
int i;
for(i=0;i<s.length();i++){
if(s.charAt(i)=='a'||s.charAt(i)=='e'||s.charAt(i)=='o'||s.charAt(i)=='i'||s.charAt(i)=='u')
while (s.charAt(i)!=' '&& i!=s.length()){ // hre lies the problem
n1+=s.charAt(i);
i++;
}
else if(s.charAt(i)==' '){
n2="";
i++;
}
else
n2+=s.charAt(i);
n3=n3+n1+n2+"ay ";
}
System.out.println(n3);
}
}
在这里,当我匹配长度的值时,循环应该中断,但它总是显示边界外的异常。我犯了什么错&;并且网关应当给出false&;true=false请帮助
上一次迭代while (s.charAt(i)!=' '&& i!=s.length()){
它试图获取导致IndexOutOfBounds
的s.charAt(i)
,因为i = length
意味着对于数组的大小来说,这是一个高值。
如果你先检查大小,它将被评估为不真实,因为i = length
,所以你永远不会到达s.charAt(i)
,因为第一个评估将不真实,因此永远不会抛出异常。这被称为短路。
将while条件更改为:
while (i != s.length() && s.charAt(i) !=' ')
你应该在charAt(i(之前先检查长度
定义条件的保险丝是错误的!
if(s.charAt(i)=='a'|| s.charAt(i)=='e'||
s.charAt(i)=='o'|| s.charAt(i)=='i'|| s.charAt(i)=='u')
while (s.charAt(i) != ' ' && i!=s.length()){ // hre lies the problem
n1+=s.charAt(i);
i++;
}
如果字符是a或e、i、o或u,那么为什么要检查s.charAt(i) != ' '
??另一方面如果你做这样的
for(i=0;i<s.length();i++){
在那里我永远不会到达s.length
你为什么要这样做:i!=s.length()
而条件只是死代码