我想在数组中加总相同的数字。输出是:
20
20
20
60
但我想要输出:
30 60
这是我的代码:
int sum = 0;
int array[] = {10, 10, 10, 20, 30, 30};
for (int i = 0; i < array.length - 1; i++) {
for (int k = i + 1; k < array.length; k++) {
if(i != k && array[i] == array[k]) {
sum = array[i] + array[k];
System.out.println(sum);
}
}
}
答案 0 :(得分:0)
您可以使用HashMap<Integer, Integer>
执行此操作:
Map<Integer, Integer> sums = new HashMap<>();
int[] arr = {10,10,10,20,30,30};
for(int i=0,n=arr.length;i<n;i++){
sums.put(arr[i], sums.get(arr[i])==null?arr[i]:sums.get(arr[i])+arr[i]);
}
这会将Array
中的每个唯一值与其各自的总和进行分组。
答案 1 :(得分:0)
有多种方法:
String result = Stream.of(3, 4, 5, 3, 4, 5, 5, 4, 2).
collect(Collectors.groupingBy(Function.identity())).
entrySet().stream().
map(e->e.getKey() * e.getValue().size()).
collect(StringBuilder::new, (s, i)->s.append(i).append(", "), (a, b)->a.append(b)).
toString();
构建一个表,列出具有相同值的所有整数,将其转换为相等数字的总和,并将其收集到StringBuilder
int[] test = new int[]{3, 4, 5, 3, 4, 5, 5, 4, 2};
Map<Integer, Integer> ints = new HashMap<>();
for(int i : test)
ints.put(i, ints.getOrDefault(i, 0) + i);
System.out.println(ints.toString());
此代码只是构建一个包含每个整数的表,并且它的相应计数乘以该整数。
为了完整起见:
int[] test = new int[]{3, 4, 5, 3, 4, 5, 5, 4, 2};
boolean[] flags = new boolean[test.length];
for(int i = 0; i < test.length; i++)
{
//ignore already processed items
if(flags[i])
continue;
flags[i] = true;
//sum up and mark processed elements as processed
int tmp = test[i];
for(int j = i + 1; j < test.length; j++)
if(test[j] == test[i]) {
flags[j] = true;
tmp += test[i];
}
System.out.print(tmp + " ");
}
此代码的工作原理是从第一个元素开始,查找所有相等的值,将这些值标记为已访问(以避免重复 - flags
),打印它们的总和并继续处理数组中的下一个未处理的元素。
答案 2 :(得分:0)
您可以使用Java 8 stream()
轻松完成此操作,例如:
public static void main(String[] args) throws Exception {
int[] array = {10, 10, 10, 20, 30, 30};
Map<Integer, Long> mappings =
Arrays.stream(array)
.boxed()
.collect(Collectors.groupingBy(Function.identity(), TreeMap::new, Collectors.counting()));
for(Integer key : mappings.keySet()){
if(mappings.get(key) > 1){
System.out.println(key * mappings.get(key));
}
}
}