从给定数组打印偶数数组

时间:2014-03-03 16:46:08

标签: java

我有以下输入序列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]);
         }
     }
 }

我得到了结果4, 2, 6, 8, 0, 0, 0,但我希望4, 2, 6, 8。零不是必需的。出了什么问题?

6 个答案:

答案 0 :(得分:1)

这是因为您的eve数组与原始arr的长度相同,因此其余值为0 [默认情况下ìnt数组初始化]。

答案 1 :(得分: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]); 
        }

答案 2 :(得分: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);
}

答案 3 :(得分: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]);
      }
    }
}

答案 4 :(得分:0)

你有那些0,因为你打印的是你最初拥有的元素数量,即使你的偶数可能较少,默认情况下int数组的初始化为0。

假设您想要一个适用于每个输入的方法,它应该如下所示:

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

备注: 这里我使用ArrayList,因为初始化时不需要指定它的大小(使用它需要在第一行代码上导入)

在第一个上你也有i&lt; = a,条件是,它会尝试访问一个不存在的位置并给出一个indexOutOfBoundsException。

答案 5 :(得分: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;
            }

        });
    }
}