随机数组数位和计算及前三大数位和元素索引输出问题
解决你的数组数位和与索引问题
嘿,你已经迈出了很好的第一步!咱们来一步步解决你遇到的两个核心问题:数位和的计算位置,以及如何保留索引并找出数位和最大的三个元素。
核心问题分析
你提到的数位和计算逻辑是完全正确的,但直接嵌套在循环里容易混乱,咱们把它抽成一个独立的工具方法会更清晰。另外,直接用Arrays.sort(tab)会丢失原数组的索引,所以必须同时记录每个元素的索引和对应的数位和——这是关键!
完整解决方案代码
import java.util.Arrays; import java.util.Random; public class Ex1 { // 自定义类:存储元素的原索引和对应的数位和 static class ElementWithIndex { int index; int digitSum; public ElementWithIndex(int index, int digitSum) { this.index = index; this.digitSum = digitSum; } } // 计算一个数的数位和的工具方法 private static int calculateDigitSum(int num) { int sum = 0; int temp = num; while (temp > 0) { sum += temp % 10; // 取最后一位数字加到总和 temp /= 10; // 移除最后一位数字 } return sum; } public static void main(String[] args) { Random rand = new Random(); // 生成4-7之间的随机数组大小 int size = rand.nextInt(4) + 4; int tab[] = new int[size]; // 填充100-999之间的随机元素 for (int i = 0; i < tab.length; i++) { tab[i] = rand.nextInt(900) + 100; } System.out.println("生成的数组: " + Arrays.toString(tab)); // 记录每个元素的索引和数位和 ElementWithIndex[] elementsInfo = new ElementWithIndex[tab.length]; for (int i = 0; i < tab.length; i++) { elementsInfo[i] = new ElementWithIndex(i, calculateDigitSum(tab[i])); } // 按数位和升序排序(这样最后三个就是数位和最大的) Arrays.sort(elementsInfo, (a, b) -> Integer.compare(a.digitSum, b.digitSum)); // 输出数位和最大的三个元素的索引 System.out.println("数位和最大的三个元素的索引:"); // 从倒数第三个开始遍历到最后一个 for (int i = elementsInfo.length - 3; i < elementsInfo.length; i++) { int index = elementsInfo[i].index; System.out.printf("索引 %d,元素值 %d,数位和 %d%n", index, tab[index], elementsInfo[i].digitSum); } } }
关键步骤解释
数位和计算的优化:
把数位和计算抽成calculateDigitSum方法,复用性更强,代码更易读。你之前的逻辑完全正确,只是放在独立方法里能避免循环嵌套的混乱,也方便后续调试。保留索引信息:
用ElementWithIndex类存储每个元素的原索引和数位和,这样排序后不会丢失原位置信息——这就是为什么不能直接排序原数组的原因,原数组排序后索引会被彻底打乱,无法对应到原始位置。排序与取结果:
我们用Lambda表达式对elementsInfo数组按数位和升序排序,排序后数组的最后三个元素就是数位和最大的三个,直接遍历输出它们的索引即可。如果数组大小刚好是4,那倒数第三个就是第一个元素,完全符合你的需求。
测试示例输出
假设生成的数组是[123, 456, 789, 999],数位和分别是6、15、24、27,那么输出会是:
生成的数组: [123, 456, 789, 999] 数位和最大的三个元素的索引: 索引 1,元素值 456,数位和 15 索引 2,元素值 789,数位和 24 索引 3,元素值 999,数位和 27
内容的提问来源于stack exchange,提问作者Saeed Zaghdoudi
相关产品推荐
相关产品推荐

