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);
}
}
在这里,当我匹配length的值时,循环应该中断,但总是显示出站异常。我用过&&我的错误是什么,网关应该给出false && true = false 请帮助
答案 0 :(得分:0)
在您的上一次迭代while (s.charAt(i)!=' '&& i!=s.length()){
它试图抢占s.charAt(i)
导致IndexOutOfBounds
,因为i = length
的含义是数组大小高一个值。
如果您先检查大小,则由于i = length
的计算结果将为不正确,因此您将永远不会到达s.charAt(i)
,因为首次计算的结果将不为真,因此永远不会引发异常。这称为短路。
答案 1 :(得分:0)
定义您的状况的保险丝是错误的!
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()
虽然条件只是无效代码
答案 2 :(得分:0)
将您的while条件更改为此:
while (i != s.length() && s.charAt(i) !=' ')
您应该在charAt(i)之前先检查长度