将数组中的多个数字分成数字并计算重复数字

时间:2016-10-06 06:10:47

标签: java arrays

我正在尝试解决一些基本的java问题:

我有一个类似int[] x = { 12, 24, 33 };.的数组我需要将其分解为{1, 2, 2, 4, 3 ,3}之类的数字,然后以这种方式计算重复数字:1:1, 2:2, 3:2, 4:1.

到目前为止,我得到了这段代码,但我无法将数字保存到数组中。 有人可以帮助我吗?

public class targil_2_3 {
    public static void main(String[] args) {

        int[] x = { 12, 24, 33 };
        int[] ara = new int[x.length * 2];

        for (int i = 0; i < x.length; i++) {
            for (int j = 0; j < 2; j++) {  
                ara[j] = x[i] % 10;
                x[i] = x[i] / 10;
                System.out.println(ara[j]);
            }
        }            
    }       
}

4 个答案:

答案 0 :(得分:3)

您不需要存储个别数字,您需要存储数字的计数。让我们假设您正在使用基于10个数字,然后代码看起来像

public static void main(String[] args) {
    int[] x = { 12, 24, 33, 0, 10, 555 };

    int[] count = new int[10];
    for (int i = 0; i < x.length; i++) {
        int num  = x[i];
        if (num == 0) {
            count[0]++;
            continue;
        }

        while (num > 0) {
            count[num % 10]++;
            num = num / 10;
        }
    }

    System.out.println(Arrays.toString(count));
}

输出

[2, 2, 2, 2, 1, 3, 0, 0, 0, 0]

答案 1 :(得分:2)

import java.util.Arrays;
import java.util.Map;
import static java.util.stream.Collectors.*;

public class Use {
    public static void main(String[] args) {
        int[] x = { 12, 24, 33 };
        Map<Integer, Long> result = Arrays.stream(x).boxed()
                                        .map(String::valueOf)
                                        .collect(joining())
                                        .chars().boxed()
                                        .collect(groupingBy(Character::getNumericValue, counting()));
        System.out.println(result); //prints {1=1, 2=2, 3=2, 4=1}
    }
}

解释

  1. 第一行将int[]转换为Stream<Integer> (针对每个元素)
  2. Stream<Integer>转换为Stream<String>
  3. Stream<String>缩减为String
  4. 创建Stream<Integer> (对于每个数字)
  5. 计算Map
  6. 中每个数字的出现次数

答案 2 :(得分:1)

我们只有10位十进制数字,从0到9,[0..9]

所以我们创建一个长度为10的数组,如count:

int count[] = new int[10];
for(int i = 0 ; i < x.length ; i++){
     if( x[i] == 0 ){
         count[0]++;
         continue;
     }
     while(x[i]!=0){
         int index = x[i] % 10;
         count[index]++;
         x[i] /= 10;
     }
}

然后我们将得到count数组中的位数,因此我们可以打印它:

for(int i = 0 ; i < 10 ; i++)
    System.out.println(i+" : "+count[i]);

如果您的数据太大,最好使用Map 有很多方法可以做到这一点

答案 3 :(得分:0)

数字为0-9。构建一个大小为10的计数器数组,并计算在计数器数组的正确索引中提取的每个数字(&#34; counter [digit] ++&#34;)。

编辑:当然,最后你可以根据计数器数组构建所需的结果数组。

例如:result [0] =&#34; 0:&#34; + counter [0];&#34;

祝你好运!