2014-03-03 137 views
0

我有以下輸入序列4, 2, 3, 5, 6, 8, 19。我只想打印甚至是值。從給定數組打印偶數組

我使用這個代碼:

class EvenArray { 
    public static void main(String args[]) { 
     int arr[] = { 4, 2, 3, 5, 6, 8, 19 }; 

     int a = arr.length; 

     int eve[] = new int[a]; 

     for (int i = 0; i <= a; i++) { 
      if (arr[i] % 2 == 0) { 
       for (int j = 0; j <= i; j++) { 
        eve[j] = arr[i]; 
       } 
      } 
      System.out.println(eve[i]); 
     } 
    } 
} 

我得到follwoing結果4, 2, 6, 8, 0, 0, 0但我希望4, 2, 6, 8。零點不是必需的。什麼地方出了錯?

+2

你確定你沒有得到一個'IndexOutOfBoundsException' –

+0

檢查車況'如果(ARR [I]!= 0)'分配到前值'eve' array – dreamcoder

+0

'System.out.println(eve []);'是無效的語法。要打印數組,您正在尋找'System.out.println(Arrays.toString(eve));' –

回答

1

這是因爲您的eve陣列具有與原始arr相同的長度,所以其餘值爲0 [默認爲ìnt陣列初始化]。

0

你迭代循環等於數組的大小,因此排除0您需要添加如下條件:

 for(int i=0;i<a;i++) 
     { 
      if(arr[i]%2==0) 
      { 
       for(int j=0;j<=i;j++) 
       { 
        eve[j] = arr[i]; 
       } 
      } 
      if(eve[i]==0) 
       continue; 
      System.out.println(eve[i]); 
     } 
0

如果你只關心不是零和其他的偶數不想有任何其他元素,我建議你使用ArrayList,你最初不需要知道總大小。

ArrayList<Integer> even=new ArrayList<Integer>(); 
for(int i=0;i<a;i++) 
{ 
    if(arr[i]%2==0 && arr[i]!=0) 
    even.add(arr[i]); 
} 

要打印值

for(Integer i:even) 
{ 
    System.out.println(i); 
} 
0

試試這個: -

class evenArray 
{ 
    public Static void main(String args[]) 
    { 
     int arr[]={4,2,3,5,6,8,19}; 
     int a = arr.length; 
     int eve[]= new int[a]; 
     for(int i=0,j=0;i<a;i++) 
     { 
      if(arr[i]!=0 && arr[i]%2==0) 
      { 
        eve[j] = arr[i]; 
        j++;      
      } 

     } 

    //Printing elements 
    for(int k=0;k<eve.length;k++){ 
     System.out.println(eve[k]); 
     } 
    } 
} 
+0

I猜測,'System.out.println(eve [i]);'? – hofmeister

+0

對不起,我錯過了。 –

0

你有那些0,因爲你打印元素的量必須開始即使你可能有少數偶數,默認情況下,一個int數組用0初始化。

假設你想,每輸入工作就應該是這個樣子的方法:初始化時 這裏我使用ArrayList,因爲你並不需要指定它的大小:

import java.util.ArrayList; 

class EvenArray { 
public static void main(String args[]) { 
    int arr[] = { 4, 2, 3, 5, 6, 8, 19 }; 

    int a = arr.length; 

    ArrayList<Integer> eve = new ArrayList<Integer>(); 

    for (int i = 0; i < a; i++) { 
     if (arr[i] % 2 == 0) { 
       eve.add(arr[i]); 
     } 
    } 
    System.out.println(eve); 
    } 
} 

注意事項(使用它,你需要在代碼的第一行輸入)

在第一個你也有我< = a,條件,這將嘗試訪問一個不存在的位置,並給出一個indexOutOfBoundsException。

0

而對於一個真正的OTT解決方案:

interface Filter<T> { 

    public boolean accept(T f); 
} 

static class FilteredNumbers implements Iterable<Number> { 

    private final List<Number> numbers = new ArrayList<>(); 
    private final Filter filter; 

    public FilteredNumbers(List<Number> numbers, Filter filter) { 
     this.numbers.addAll(numbers); 
     this.filter = filter; 
    } 

    public FilteredNumbers(Number[] numbers, Filter filter) { 
     this(Arrays.asList(numbers), filter); 
    } 

    @Override 
    public Iterator<Number> iterator() { 
     return new Iterator<Number>() { 
      int i = 0; 
      Number next = null; 

      @Override 
      public boolean hasNext() { 
       if (next == null) { 
        for (; i < numbers.size() && next == null; i++) { 
         Number n = numbers.get(i); 
         if (filter.accept(n)) { 
          next = n; 
         } 
        } 
       } 
       return next != null; 
      } 

      @Override 
      public Number next() { 
       Number n = hasNext() ? next : null; 
       next = null; 
       return n; 
      } 

     }; 
    } 

} 

static class EvenNumbers extends FilteredNumbers { 
    public EvenNumbers (Number[] numbers) { 
     super(numbers, new Filter<Number>() { 

      @Override 
      public boolean accept(Number f) { 
       return f != null && (f.intValue() & 1) == 0; 
      } 

     }); 
    } 
}