2014-03-29 58 views
1

我想製作一個程序,它將一個數組作爲輸入並刪除所有奇數索引。它編譯但不運行。由於某種原因它標記了while循環。我不知道如何解決這個問題。返回一個數組與每隔一個數

感謝

public class MoreArrayProblems 
{ 
    public int[] everyOther (int [] a){ 
     if (a.length < 2){ 
     return a; 

     } 

     int []l = new int[a.length/2]; 
     //if (a.length%2==0) {int l[]= new int [a.length/2];} 
     //else {l[] = int [a.length + 1/2];} 

     int loc= 0, i = 1; 
     while (i<a.length){ 
      l[i] = a[i-1]; //for some reason this doesn't work 
      i += 2; 

     } 

     return l; 

    } 

} 
+0

請描述該錯誤。它說什麼? –

+0

java.lang.ArrayIndexOutOfBoundsException:3 \t在MoreArrayProblems.everyOther(MoreArrayProblems.java:22) – tim

+0

這是一個運行時間錯誤 – tim

回答

1

這裏是你的代碼作爲SSCCE,與另外一個有用的調試語句。

import java.util.Arrays; 
public class MoreArrayProblems 
{ 
    public static final void main(String[] ignored) { 
    System.out.println(Arrays.toString(
     (new MoreArrayProblems()).everyOther(new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}))); 
    } 
    public int[] everyOther (int [] a){ 
     if (a.length < 2){ 
     return a; 

     } 

     int []l = new int[a.length/2]; 
     //if (a.length%2==0) {int l[]= new int [a.length/2];} 
     //else {l[] = int [a.length + 1/2];} 

     int loc= 0, i = 1; 
     while (i<a.length){ 
System.out.println("l.length=" + l.length + ", a.length=" + a.length + ", i=" + i + ", [i - 1]=" + (i - 1) + ""); 
      l[i] = a[i-1]; //for some reason this doesn't work 
      i += 2; 

     } 
     return l; 
    } 
} 

輸出:

[C:\java_code\]java MoreArrayProblems 
l.length=5, a.length=10, i=1, [i - 1]=0 
l.length=5, a.length=10, i=3, [i - 1]=2 
l.length=5, a.length=10, i=5, [i - 1]=4 
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 
     at MoreArrayProblems.everyOther(MoreArrayProblems.java:21) 
     at MoreArrayProblems.main(MoreArrayProblems.java:5) 

第一元件在陣列中具有索引的0,不1。這個事實以及上面的調試結果揭示了一些相當大的問題。

+0

好的,謝謝大家的幫助,我現在只需要弄清楚如何刪除所有空的索引/零。我認爲之前有一些代碼會執行此操作。 – tim

+0

謝謝你的大綠色複選標記! – aliteralmind

0
public class MoreArrayProblems { 
    public static void main(String[] args) { 
     int divider = 2; 
     int[] a = {100, 200, 300, 400, 500, 600}; 
     int[] l = new int[a.length/divider]; 

     int i = 0; 
     while (i<l.length){ 
      l[i] = a[i*divider]; 
      System.out.println(l[i]); 
      i++; 
     } 
    } 
} 
0

我想你想要做的就是對你的數組'l'使用'loc'。事情是這樣的:

public int[] everyOther(int[] a) { 
    if (a.length < 2) { 
     return a; 

    } 

    int[] l = new int[a.length/2]; 

    int loc = 0, i = 0; 
    System.out.println("size: " + a.length); 
    while (i < a.length) { 
     if (!isOdd(a[i])){ 
      l[loc] = a[i]; 
      loc++; 
     } 
     i++;    

    } 

    return l; 
} 

這是isOdd功能

public boolean isOdd(int number) { 
    return number % 2 != 0; 
} 

由於l.lenght被設置爲a.length/2如果數組a的大小是一個甚至number.For實例驗證碼只會工作,如果a.legth = 9那麼l將只有4,當執行while循環時這將導致java.lang.ArrayIndexOutOfBoundsException

+0

「只有在陣列a的大小是偶數時它才能工作......」你能詳細說明一下嗎? – aliteralmind