!=在while循环中无法正常运行

时间:2020-08-25 17:26:11

标签: java while-loop

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 请帮助

3 个答案:

答案 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)之前先检查长度