InputStream方法中的OutOfBoundsException

时间:2014-04-25 12:22:07

标签: java indexoutofboundsexception

我正在编写一个删除单词中重复字母的程序,它在第22行显示出界限错误,我无法确定问题所在。 继承人的代码

import java.io.*;
public class p23
{
    public static void main(String args[])throws IOException
    {
        String inp , z = "" ;
        int len , i ,j , l;
        char x ,y ;
        InputStreamReader read=new InputStreamReader(System.in);
        BufferedReader in=new BufferedReader(read);
        System.out.println("Enter a string");
        inp = in.readLine();
        inp = inp + ' ';
        len = (inp.length())-1;
        for (i=0;i<=len;i++)
        {
            x = inp.charAt(i);
            z = z + x ;
            l = i + 1 ;
            for ( j=i ; j<len ; j++)
            {
                y = inp.charAt(j);
                if(x==y)
                continue;
                else
                z = z + y;
            }
            inp = z ;
            z = " " ;
            if (inp.charAt(l)==' ')
            break ;
        }
        System.out.println("new String "+inp);
    }
}

请建议一个选项

2 个答案:

答案 0 :(得分:3)

在for()循环结束之前,i的值为len。然后设置超出范围的l = i + 1,稍后在inp.charAt(l)上获取。那就是它。

经过进一步调查(我没有在我的IDE中运行程序,只需阅读你的代码)我观察到了我猜的真正原因。对于inp = z的每次迭代,请查看i。当i增长时,z变得越来越短,因为它以" "开头,所以联合xlen - i的其余部分。这将比您的l更短,len + 1会及时len或至少l。在inp循环的每次迭代中,i的值与{{1}}的变体不同步。

答案 1 :(得分:0)

请参阅下面代码中的注释,它显示了一个失败的案例。

{
    String inp="aaa" , z = "" ;
    int len , i ,j , l;
    char x ,y ;
    inp = inp + ' ';
    len = (inp.length())-1;
    for (i=0;i<=len;i++) // i is 0
    {
        x = inp.charAt(i); // X is 'a'
        z = z + x ; 'z is 'a'
        l = i + 1 ; // l is 1
        for ( j=i ; j<len ; j++)
        {
            y = inp.charAt(j);
            if(x==y)
            continue;
            else
            z = z + y;
        }
        // z is still 'a'
        inp = z ;
        // inp is also 'a'
        z = " " ;
        // inp.charAt(1) -> OOB
        if (inp.charAt(l)==' ')
        break ;
    }
    System.out.println("new String "+inp);
}