0

方法接受一个整数数组并返回新的整数数组,甚至没有整数。我已经写了一些东西,但在主要方法中无法正确打印……这就是我所拥有的

 //filterAway method taking out evens from string

    public static int[] filterArray(int[] x){
            int [] arrayOne;
            int size = 0;

            for(int i=0; i<x.length; i++){
                if(x[i] % 2 != 0){
                    size++;
                }
            }

            arrayOne = new int [size];

            int index =0;
            for(int i=0; i<x.length; i++){
                if(x[i] % 2 != 0){
                    arrayOne[index] = x[1];
                    index++;
                }
            }
            return arrayOne;
        }

    //main 

     public static void main(String args[]){
            int[] f = {1,2,3,4,5,6,7,8,9,10,11,12};
            for (int i =0; i <f.length; i++){
                System.out.print(f[i] + " ");
            }
            System.out.println(" ");
                                                   //here is where im struggling.
            int [] fA= (filterAway);               // say the string is 1-12....cannot get 
                                                   // filtered array to print
            for (int i =0; i <fA.length; i++){
                System.out.print(arrayOne[i] + " ");
            }``
            System.out.println(" ");
                }
4

3 回答 3

1

修复显示问题

试试这个修改后的 main 方法,只需将YourClassName替换为您的类名:

public static void main(String args[]) {
    int[] f = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
    for (int i = 0; i < f.length; i++) {
        System.out.print(f[i] + " ");
    }
    System.out.println(" ");
    // here is where im struggling.
    int[] fA = YourClassName.filterArray(f);
    // filtered array to print
    for (int i = 0; i < fA.length; i++) {
        System.out.print(fA[i] + " ");
    }
    System.out.println(" ");
}

但是,您会看到最终可能会得到类似 2, 2, 2, 2 的东西。您需要重新访问您的 filterArray 函数。

修复filterArray功能

由于您的问题的标题是 Filtering Out Ints in Java,这是罪魁祸首,将1更改为i,这就是它给出 2、2、2、2 的原因。此外,您想要偶数,因此您应该寻找 0 模,将比较器更改为 ==,而不是 !=。

在此处输入图像描述

于 2013-05-11T01:48:27.343 回答
0

您需要将您的f[]作为参数传递给您的filterAway()方法。

public static void main(String args[]){
    int[] f = {1,2,3,4,5,6,7,8,9,10,11,12};
    for (int i =0; i <f.length; i++){
        System.out.print(f[i] + " ");
    }
    System.out.println(" ");
    int [] fA= filterArray(f);               
    for (int i =0; i <fA.length; i++){
        System.out.print(fA[i] + " ");
    }
    System.out.println();
}
于 2013-05-11T01:47:20.777 回答
0

以下是您应该根据您的要求执行的操作:

package com.sandbox;

public class Sandbox {

    public static void main(String[] args) {
        int[] all = new int[]{1, 2, 3, 4, 5, 6};

        int[] filtered = odds(all);
        for (int i : filtered) {
            System.out.println(i);
        }
    }

    private static int[] odds(int[] all) {
        int sizeOfResult = 0;
        for (int i : all) {
            if (isOdd(i)) {
                sizeOfResult++;
            }
        }

        int[] result = new int[sizeOfResult];
        int resultIndex = 0;
        for (int i : all) {
            if (isOdd(i)) {
                result[resultIndex] = i;
                resultIndex++;
            }
        }
        return result;
    }

    private static boolean isOdd(int i) {
        return i % 2 != 0;
    }
}

如果我自己写这个,我会这样做:我会使用 List 而不是数组,我会使用CollectionUtils.filter. 这是一段代码,可以满足您的需求:

package com.sandbox;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.Predicate;

import java.util.ArrayList;
import java.util.List;

import static com.google.common.primitives.Ints.asList;

public class Sandbox {

    public static void main(String[] args) {
        List<Integer> result = new ArrayList<Integer>(asList(1, 2, 3, 4, 5, 6));
        CollectionUtils.filter(result, new Predicate() {
            @Override
            public boolean evaluate(Object o) {
                return isOdd((Integer) o);
            }
        });
        for (Integer integer : result) {
            System.out.println(integer);
        }
    }

    private static boolean isOdd(int i) {
        return i % 2 != 0;
    }
}
于 2013-05-11T02:01:43.627 回答