!=在while循环中未正常运行


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);
}
}

在这里,当我匹配长度的值时,循环应该中断,但它总是显示边界外的异常。我犯了什么错&amp;并且网关应当给出false&amp;true=false请帮助

上一次迭代while (s.charAt(i)!=' '&& i!=s.length()){

它试图获取导致IndexOutOfBoundss.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()

而条件只是死代码

最新更新