Java生成指定范围随机数组并计算总和问题求助
问题分析与修正方案
你的代码存在这些核心问题:
- 随机数范围错误:你用
min + rand.nextInt(max) * 2生成的数实际范围是[-250, 248],无法达到250。正确的区间计算应该是先算总长度(250 - (-250) = 501),用rand.nextInt(501)得到[0,500]的数,再加min(-250)才能覆盖[-250,250]。 - 变量作用域问题:第二段代码里
rez定义在for循环内部,循环结束后外部无法访问,所以会报"Cannot resolve symbol 'rez'"错误。 - 总和逻辑错误:你每次循环里
sum = rez + rez只是把当前数字翻倍,不是累加所有数字的总和;且第一段代码每次循环都打印"总和",不符合你"仅在末尾打印总和"的要求。 - 打印内容错误:你打印的是循环次数
i,不是生成的随机数rez,和"打印每个数字"的需求不符。
修正后的完整代码
import java.util.Random; public class Main { public static void main(String[] args) { Random rand = new Random(); int max = 250; int min = -250; // 总和变量定义在循环外部,保证持续累加 int totalSum = 0; for (int i = 1; i <= 50; i++) { // 正确生成[-250,250]范围的随机数 int rez = min + rand.nextInt(max - min + 1); // 打印生成的随机数,而非循环次数 System.out.println("The number is : " + rez); // 累加当前数字到总总和 totalSum += rez; } // 循环结束后打印最终总和 System.out.println("The total sum is: " + totalSum); } }
关键修正说明
- 变量作用域:将
totalSum放在循环外,确保每次循环都能对同一个变量累加,循环结束后可访问最终值。 - 随机数生成:
rand.nextInt(max - min + 1)生成[0, max-min]的整数,加上min后刚好覆盖目标区间[min, max]。 - 总和逻辑:用
totalSum += rez实现所有随机数的累加,替换错误的翻倍操作。 - 打印内容:把打印的
i改为rez,确保输出的是生成的随机数字。
内容的提问来源于stack exchange,提问作者Pop Raluca
相关产品推荐
相关产品推荐

