将n个数字的数组重复返回到另一个数组中

时间:2015-02-12 01:41:38

标签: java arrays

基本上我必须将一个在数组中重复的n个数字的数组返回到另一个长度为m的数组中。 我的代码到目前为止:

public class Histogram {
     public static int[] frequency(int[] a, int M) {
         int[] m = new int[M];
         int count = 0;
         for(int j = 0; j < a.length; j++)
         for(int i = 0; i < m.length; i++)
             if( i == a[j]){
                m[i] = count++;
             }
      }
      return m; 
} public static void main(String[] args) {
    int[] a = {7, 4, 9, 1, 10, 11, 11, 1, 5, 8, 4, 2, 9, 4, 3, 9,
               2, 10, 11, 7, 7, 1, 11, 3, 8, 8, 10, 4, 10, 5};
    int[] b = frequency(a, 12);
    for (int i = 0; i < b.length; i++) {
        Std.Out.println(i + "->" + b[i]);
     }   } }

这是我应该得到的输出

0->0
1->3
2->2
3->2
4->4
5->2
6->0
7->3
8->3
9->3
10->4
11->4

但即将到来

0->0
1->21
2->16
3->23
4->27
5->29
6->0
7->20
8->25
9->15
10->28
11->22

我做错了什么?

3 个答案:

答案 0 :(得分:0)

这应解决它并完成工作!

public class Histogram {

    public static int[] frequency(int[] a, int M) {
        int[] m = new int[M];
        for(int j = 0; j < a.length; j++) {
            m[a[j]] += 1;
        }
        return m;
    }

    public static void main(String[] args) {
        int[] a = {7, 4, 9, 1, 10, 11, 11, 1, 5, 8, 4, 2, 9, 4, 3, 9, 
                2, 10, 11, 7, 7, 1, 11, 3, 8, 8, 10, 4, 10, 5};
        int[] b = frequency(a, 12);
        for (int i = 0; i < b.length; i++) {
            System.out.println(i + "->" + b[i]);
        }
    }
}

答案 1 :(得分:0)

public class Histogram {
     public static int[] frequency(int[] a, int M) {
         int[] m = new int[M];
         for(int i = 0; i < a.length; i++) //loop through a
            if( i < M) //number check
                m[a[i]]++; //add one to m at index a[i]
         return m;    
      }
}

这是方法频率的正确代码,也会检查数字是否在范围内。

答案 2 :(得分:0)

我不打算给你一个不同的解决方案,而是展示代码中的错误。如果我们使用代码中的逻辑,那么你几乎没有错误:

1)第一次循环后应将count重置为0。否则,您将总结先前迭代的计数。

2)count ++应该在赋值之前,否则它将首先赋值然后递增。或者你可以使用++ count。

3)第一个循环应该是i。

public static int[] frequency(int[] a, int M) {
     int[] m = new int[M];
     int count;
     for(int i = 0; i < m.length; i++) {
     count =0;
     for(int j = 0; j < a.length; j++)
         if( i == a[j]){
            count++;
            m[i] = count;
         }
     }

    return m;

  }

问候。