我正在编写一个删除单词中重复字母的程序,它在第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);
}
}
请建议一个选项
答案 0 :(得分:3)
在for()循环结束之前,i
的值为len
。然后设置超出范围的l = i + 1
,稍后在inp.charAt(l)
上获取。那就是它。
经过进一步调查(我没有在我的IDE中运行程序,只需阅读你的代码)我观察到了我猜的真正原因。对于inp = z
的每次迭代,请查看i
。当i
增长时,z变得越来越短,因为它以" "
开头,所以联合x
和len - 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);
}