我正在尝试解决一些基本的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]);
}
}
}
}
答案 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}
}
}
int[]
转换为Stream<Integer>
(针对每个元素) Stream<Integer>
转换为Stream<String>
Stream<String>
缩减为String
Stream<Integer>
(对于每个数字) Map
答案 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;
祝你好运!