2016-10-26 127 views
0

我的程序正在嘗試查找數組中最長的連續序列,但輸出錯誤。刪除數組中無用的元素

public class longsec { 
    public int[] longestForward(int[] arr){ 
     int subSeqLength = 1; 
     int longest = 1; 
     int indexStart = 0; 
     int indexEnd = 0; 

     for (int i = 0; i < arr.length - 1; i++) 
     { 
      if (arr[i] == arr[i + 1] - 1) 
      { 
       subSeqLength++; 
       if (subSeqLength > longest) 
       { 
        longest = subSeqLength; 
        indexStart = i + 2 - subSeqLength; 
        indexEnd = i + 2; 
       } 

      } 
      else 
       subSeqLength = 1; 
     } 


     int T[] = new int[arr.length]; 
     for (int i = indexStart; i < indexEnd; i++) 


      T[i]= arr[i]; 


     return T; 

    }} 

輸入

{23,10,22,5,33,8,9,21,50,41,60,80,99,22,23,24,25,26,27 }

輸出

[0,0,0,0,0,0,0,0,0,0,0,0,0,22,23,24,25,26,27]

right output

[22,23,24,25,26,27]

我做錯了什麼?謝謝。

+0

'int T [] = new int [arr.length];'應該是'int T [] = new int [indexEnd-indexStart + 1];'也許不是'+ 1'。我需要睡眠。無論如何,'for'循環將需要調整。 'T [i] = arr [i + indexStart];'或類似的東西。 – bradimus

+0

它給了我「java.lang.ArrayIndexOutOfBoundsException」如果我這樣做。 –

+0

您是否調整過'for'循環? 'for(int i = 0; i bradimus

回答

1

發生這種情況的原因是因爲您正在創建一個與您輸入的數組大小相同的數組。正如你在這裏看到的。

int T[] = new int[arr.length]; 

但是,如果只是改變這段代碼,你會得到一個arrayIndexOutOfBoundsException。它會拋在這裏:

for (int i = indexStart; i < indexEnd; i++) 

     T[i]= arr[i]; 

因爲indexStart會大大超過數組的長度。 因此,而不是從indexStart循環到indexEnd你應該做的是循環通過這樣的連續數字的長度。

int T[] = new int[longest]; 

for(int i = 0; i < longest; i++) 
    T[i] = arr[i + indexStart]; 

這應該給你你想要的輸出。我所做的只是通過數組的indexStart值來抵消迭代。