java - 获取所有质数到一个点
问题描述
我目前有此代码,但是当我输入一个数字(例如 20)时,它返回 -1,任何想法为什么会发生这种情况?谢谢
public static ArrayList<Integer> prime(int num){
ArrayList<Integer> primes = new ArrayList<>();
ArrayList<Integer> nul = new ArrayList<Integer>();
nul.add(-1);
for(int i = 1; i < num; i++) {
for(int j = 2; j < i - 1; j++){
if (i % j == 0) {
return nul;
}
primes.add(i);
}
}
return primes;
}
解决方案
你正在得到,-1
因为你正在返回nul
,当你的条件得到时true
。在这种情况下,您应该使用continue
,在这里它将解决您的问题,但创建另一个问题,即在这里使用它会导致您的列表中出现重复条目。
所以,我建议你使用一个boolean flag
变量break
来给你想要的结果。下面是一个代码片段,添加了注释以进行解释
public static ArrayList<Integer> prime(int num){
ArrayList<Integer> primes = new ArrayList<>();
ArrayList<Integer> nul = new ArrayList<Integer>();
nul.add(-1);
boolean flag=true;
for(int i = 1; i < num; i++) {
flag=true;
for(int j = 2; j < i; j++){
if (i % j == 0) {
flag=false; // set it to false, if number is not prime
break;
}
}
if(flag) { // If flag was true till this point
primes.add(i); // means it is current number is prime. so add it to list
}
}
return primes;
}
推荐阅读
- javascript - 迭代数组并删除特定字符
- ssl-certificate - Ghost 博客只能通过 www 访问
- sql-server - 如果传递了参数,则执行 CTE
- node.js - Node.js:来自获取的 PNG URL 的新文件
- javascript - 使用数组的响应对象数据
- javascript - Telegram 聊天机器人 如何让 Telegram 聊天机器人识别发送到群组的消息而无需使用“/”命令
- java - 无法从 Jenkinsfile 调用 java 函数。MultipleCompilationError 异常
- asp.net - 如何诊断缓慢的实体框架存储过程调用?
- pytest - Pytest 会话夹具不再执行
- json - 如何使用 scala spark 将 JSON 数组拆分为多个 JSON