2014-04-25 20 views
0

我正在写一个程序来删除一个单词中的重复的字母,它是显示出界限22行错误我无法想象出什么问题。 继承人的代码OutOfBoundsException在InputStream方法

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

for循环条件改变从i <= len个至i Selva

+1

@Selva参见LEN如何初始化 –

回答

3

你对()循环结束之前,i将有len值。然后你设置l = i + 1这是超出界限,并在inp.charAt(l)稍后获取。而已。

经过进一步的调查(我没有在我的IDE中运行该程序,只是读取您的代码),我观察到我猜的真正原因。查看inp = z,每次迭代i。当i增长时,z变得越来越短,因为它以" "开头,连接一个x和其余的len - i。这将比您的l短,这将是某人在时间len + 1或至少len。在i循环的每次迭代中,l的值与inp的变化不同步。

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

OOB是在Y = inp.charAt(J); – dpmittal