java - 随机生成的数组中的数字总和
问题描述
我知道这可能代表一个愚蠢的问题,但我有很多问题。
我将首先解释它应该如何工作:
1) 生成大小在 <4,7> 范围内的随机数组
2) 用 <100, 999> 范围内的随机元素填充它
3) 打印具有最大数字总和的三个数字的索引
所以问题是——如何?我知道我应该实现这个:
SumOfDigits += ElementFromArray % 10;
ElementFromArray /= 10;
但我不知道在哪里。我试图将其添加为if (i>0)
循环内的for
循环,但它不起作用。
最后我将如何打印正确的元素?我应该使用Arrays.sort(tab)
然后System.out.println(tab[tab.length - 1])
(以此类推,使用 -2、-3 表示最后 3 个元素)?
import java.util.Arrays;
import java.util.Random;
public class Ex1 {
public static void main(String[] args) {
Random rand = new Random();
int size = rand.nextInt(4) + 4;
int tab[] = new int[size];
for (int i = 0; i < tab.length; i++) {
int elements = rand.nextInt(900) + 100;
tab[i] = elements;
}
System.out.println(Arrays.toString(tab));
}
}
解决方案
tab
如果我们的目标是仅使用数组的解决方案,我将使用二维数组来保存数字的总和以及数组中相应数字的索引
所以首先根据原始数组的大小创建数组
int[][] sums = new int[size][2];
然后在for循环中,计算随机数之和并存储它和索引
sums[i][0] = elements / 100 + (elements / 10) % 10 + elements % 10;
sums[i][1] = i;
sums
然后使用自定义比较器对数组进行排序
Arrays.sort(sums, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return Integer.compare(o2[0], o1[0]);
}
});
最后打印前3个数字的索引和数字
for (int i = 0; i < 3; i++) {
System.out.printf("%d: %d\n", sums[i][1], tab[sums[i][1]]);
}
推荐阅读
- python - 2名玩家的掷骰子输入
- python - Python configparser 读取值中的注释
- python-3.x - 如何只将一行写入文件?
- swift - 为什么 Swift 没有正确加载这个视图,而 Objective-C 可以?
- python - 从 python 数据框创建嵌套 JSON
- c# - 在数据表中仅按列显示的正确方法是什么
- python-3.x - 即使在熊猫成功安装后,气流中也没有命名为熊猫的模块错误
- python - 如何在 Django 中为 css 和 js 文件创建公共文件夹?
- oracle - oracle如何查询一个月前执行的sql
- azure - 为什么我的 Azure 应用服务对两个计划收费?