Java 5×5随机二维数组质数求和结果异常问题求助
问题排查与解决方案
嘿,我帮你梳理下问题出在哪——你的代码现在有两个关键问题,直接导致求和结果完全不符合预期:
核心问题1:未遍历目标二维数组
你贴出的代码完全没有和你生成的5×5随机数组产生交互!当前代码只是硬编码循环了i从2到5,手动累加这个范围内的质数,这和你“计算数组中所有质数和”的需求完全脱节。如果不小心把循环的i范围设大了(比如误写成i<=100),求和结果自然会远超出数组元素能达到的总和。
核心问题2:质数判断逻辑不严谨
你现有的质数判断逻辑存在边界漏洞:
- 没有处理0和1(这两个数都不是质数)
- 循环终止条件设为
i/2虽然能判断部分质数,但效率偏低,且逻辑可以更简洁健壮
修正后的完整解决方案
我给你写了一套完整的可运行代码,包含数组生成、严谨的质数判断、数组遍历求和三个核心部分:
import java.util.Random; public class PrimeSumIn5x5Array { public static void main(String[] args) { // 1. 生成5×5的0-9随机二维数组 Random random = new Random(); int[][] numArray = new int[5][5]; for (int row = 0; row < numArray.length; row++) { for (int col = 0; col < numArray[row].length; col++) { numArray[row][col] = random.nextInt(10); // 生成0-9的随机整数 } } // 2. 遍历数组,累加所有质数的和 int primeSum = 0; for (int row = 0; row < numArray.length; row++) { for (int col = 0; col < numArray[row].length; col++) { int currentNum = numArray[row][col]; if (isPrime(currentNum)) { primeSum += currentNum; } } } // 3. 输出结果 System.out.println("The sum of all prime numbers is : " + primeSum); } // 工具方法:判断一个数是否为质数 private static boolean isPrime(int num) { // 0、1及负数都不是质数 if (num <= 1) { return false; } // 2是唯一的偶质数 if (num == 2) { return true; } // 偶数直接排除(除了2) if (num % 2 == 0) { return false; } // 只需要检查到平方根,且只遍历奇数(优化效率) for (int divisor = 3; divisor <= Math.sqrt(num); divisor += 2) { if (num % divisor == 0) { return false; } } return true; } }
代码说明:
- 数组生成:用
Random.nextInt(10)生成0-9的随机数,填充到5×5数组中 - 质数判断:
- 先排除小于等于1的数
- 单独处理唯一的偶质数2
- 排除所有其他偶数
- 只遍历奇数到平方根,大幅减少判断次数,提升效率
- 数组遍历:嵌套循环遍历数组的每一个元素,判断是质数就累加到总和里
内容的提问来源于stack exchange,提问作者Shildun
相关产品推荐
相关产品推荐

