【求助】判断101-200 之间有多少个素数,并输出所有素数 本帖最后由 marhoury 于 2013-07-23 14:44:28 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 boolean flag = false; 往下一行你的flag在101之后就一直是true了,因为每一次新数的循环开始,没有一个重置flag的机制,而你的代码假设每一个循环开始flag都是false public static void main(String[] args) { int m = 0; boolean flag = false; for(int i = 101; i <= 200; i++) { for(int j = 2; j <= Math.sqrt(i); j++) { if(i % j == 0) { flag = true; break; } } if(!flag) { System.out.print(i + " "); m++; } flag = false; } System.out.println("总共" + m + "个素数。"); } package Test; public class T1 { public static void main(String[] args) { int m = 0; boolean flag = false; for(int i = 101; i <= 200; i++) { flag = false; for(int j = 2; j <= Math.sqrt(i); j++) { if(i % j == 0) { flag = true; break; } } if(!flag) { System.out.print(i + " "); m++; } } System.out.println("总共" + m + "个素数。"); } } package Test; public class T1 { public static void main(String[] args) { int m = 0; boolean flag = false; for(int i = 101; i <= 200; i++) { flag = false;//应该在这里给flag赋值,因为可能每次都会修改其值,所以应该在每次开始外循环时重置其值 for(int j = 2; j <= Math.sqrt(i); j++) { if(i % j == 0) { flag = true; break; } } if(!flag) { System.out.print(i + " "); m++; } } System.out.println("总共" + m + "个素数。"); } } 上面那个发错了。看注释部分。 楼上的正解应该没有错了. flag这里很容易忽略. 正解,每个循环判断是否为素数的条件都没有初始化,还有就是判断是否为素数的那个循环for(int j = 2; j <= Math.sqrt(i); j++) { if(i % j == 0) { flag = true; break; } } 判断循环结束的条件应该是j<=Math/2 正解,每个循环判断是否为素数的条件都没有初始化,还有就是判断是否为素数的那个循环for(int j = 2; j <= Math.sqrt(i); j++) { if(i % j == 0) { flag = true; break; } } 判断循环结束的条件应该是j<=Math/2对不起我说错了,回去试验了一遍,j <= Math.sqrt(i)也对而且时间效率更好,不好意思 输出问题,帮忙解释一行代码? 怎样取得ArrayList的大小 如何将InputSteam 转化成OutputStream 都有哪些经典的代码可以做啊?前辈指教 Java的批处理如何返回一个以上的值 超级疑难小问题,四处找遍没结果,见鬼了! 想换程序学习的网友请进。 JDK1.5.0编绎 jb7中如何找到com.borland.jbcl.layout.*? 怎样形成一个字符串,中间含有双引号? 新手问个关于强制转换的问题。 Java的实例化问题
你的flag在101之后就一直是true了,因为每一次新数的循环开始,没有一个重置flag的机制,而你的代码假设每一个循环开始flag都是false
int m = 0;
boolean flag = false;
for(int i = 101; i <= 200; i++)
{
for(int j = 2; j <= Math.sqrt(i); j++)
{
if(i % j == 0)
{
flag = true;
break;
}
}
if(!flag)
{
System.out.print(i + " ");
m++;
}
flag = false;
}
System.out.println("总共" + m + "个素数。");
}
package Test;
public class T1 {
public static void main(String[] args) {
int m = 0;
boolean flag = false;
for(int i = 101; i <= 200; i++) {
flag = false; for(int j = 2; j <= Math.sqrt(i); j++) {
if(i % j == 0) {
flag = true;
break;
}
}
if(!flag) {
System.out.print(i + " ");
m++;
}
}
System.out.println("总共" + m + "个素数。");
}
}
package Test;
public class T1 {
public static void main(String[] args) {
int m = 0;
boolean flag = false;
for(int i = 101; i <= 200; i++) {
flag = false;//应该在这里给flag赋值,因为可能每次都会修改其值,所以应该在每次开始外循环时重置其值
for(int j = 2; j <= Math.sqrt(i); j++) {
if(i % j == 0) {
flag = true;
break;
}
}
if(!flag) {
System.out.print(i + " ");
m++;
}
}
System.out.println("总共" + m + "个素数。");
}
} 上面那个发错了。看注释部分。
for(int j = 2; j <= Math.sqrt(i); j++)
{
if(i % j == 0)
{
flag = true;
break;
}
}
判断循环结束的条件应该是j<=Math/2
for(int j = 2; j <= Math.sqrt(i); j++)
{
if(i % j == 0)
{
flag = true;
break;
}
}
判断循环结束的条件应该是j<=Math/2
对不起我说错了,回去试验了一遍,j <= Math.sqrt(i)也对而且时间效率更好,不好意思