【问题标题】:Filtering out ints on an array过滤掉数组上的整数
【发布时间】:2013-05-11 01:42:21
【问题描述】:

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

 //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(" ");
                }

【问题讨论】:

  • int[] fA=filterAway(f)arrayOne数组是什么,应该是fA

标签: java arrays printing filter int


【解决方案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 模,将比较器更改为 ==,而不是 !=。

【讨论】:

    【解决方案2】:

    以下是您应该如何处理您的要求:

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

    如果我自己编写,我会这样做:我会使用列表而不是数组,我会使用CollectionUtils.filter。这是一段可以做你想做的事情的sn-p代码:

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

    【讨论】:

      【解决方案3】:

      您需要将您的 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();
      }
      

      【讨论】:

      • 我试过这个并收到一条错误消息。找不到符号 - 方法 filterAway(int [])
      • 我现在注意到您的 filterAway 方法是静态的,因此您不需要类名部分。只需ìnt [] fA = filterAway(f);
      • 仍然收到相同的错误消息...我怎样才能获得 int [] fA = filterAway(f);在范围内?
      • 在你的最后一个打印循环中你有 System.out.print(arrayOne[i] + " "); arrayOne 在电源范围内不存在,因此您还需要将其更改为 fA[i] + " ";你的过滤算法也有一点逻辑错误,但我会留给你。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-24
      • 1970-01-01
      • 2018-09-28
      • 1970-01-01
      • 1970-01-01
      • 2018-03-14
      • 1970-01-01
      相关资源
      最近更新 更多