2014-04-25 25 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