A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 人心如水 中级黑马   /  2014-6-14 11:59  /  1836 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
* 6、 编程打印所有的3位质数,质数特点:只能被1和其本身整除
*/

public class Test6 {

        public static void main(String[] args) {
                int in;
                int count= 0;
                for(in=100;in<=999;in++){
                        for(int i =1;i<=999;i++){
                                if( in%i==0){
                                        count++;
                                }
                        }
                        if(count==2){
                                System.out.println(in);
                        }
                }
        }       
}
编译正确,执行没结果  问下哪里错了

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

9 个回复

倒序浏览
你没有重置count. 你的count一直在自赠, 第一次循环内循环结束,你的count值就已经大于2了.后面越来越大 肯定没输出啊. 你要在每次外层for循环结束的时候重置count=0;
  还有 你这个程序有点小不足.
  内层循环  for(int i = 1 ; i<=999;i++) 这里小于999会多出很多多余操作, 假如当你的in等110的时候,你再除以110以后的数有意义吗?  所以 应该定义成  for(int i = 1; i<=in;i++);

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
代码可修改为如下内容:
public class Test6{
  
  public static void main(String [] args){
        int m=0;
        for(int i=100;i<=999;i++){
                for(int j=1;j<=i/2;j++){
                if(i%j == 0)
        m++;
                }
                if(m == 2){
                System.out.print(i+",");
                }
                m=0;
        }
  }  
}

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 Alan_Kwan 于 2014-6-14 20:05 编辑
  1. class Test
  2. {
  3.         public static void main(String [] args)
  4.         {
  5.                 printPrimes();
  6.         }

  7.         //判断一个3位数是否为质数,若是返回true,这里本应该加入如果传入的x小于2的异常处理
  8.         public static boolean isPrimes(int x)
  9.         {
  10.                 for(int i = 2; i < x; i++)
  11.                 {
  12.                         //一旦可以被i整出,则可以知道是非质数,此时可直接返回
  13.                         if(x % i == 0)
  14.                                 return false;
  15.                 }
  16.                 //能执行到这里表明上面的数都不能整数,所以是质数
  17.                 return true;
  18.         }
  19.         public static void printPrimes()
  20.         {
  21.                 for(int i = 100; i < 1000; i++)
  22.                 {
  23.                         if(isPrimes(i))
  24.                                 System.out.print(i+" ");
  25.                 }
  26.         }

  27. }
复制代码

我帮你重新写了一遍,我想你看懂了我写的,你应该就不会再去纠结你的代码问题了,之前写错了isPrimes里面的判断。

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
Alan_Kwan 发表于 2014-6-14 18:59
我帮你重新写了一遍,我想你看懂了我写的,你应该就不会再去纠结你的代码问题了

...

你这个有输出115 后面还有好多不是质数,质数只能被1和他本身整除啊
回复 使用道具 举报
人心如水 发表于 2014-6-14 19:49
你这个有输出115 后面还有好多不是质数,质数只能被1和他本身整除啊

sorry,我里面的判断搞错了。。我竟然求的是双数。。等等我改改
回复 使用道具 举报
江夷 发表于 2014-6-14 15:40
代码可修改为如下内容:
public class Test6{
  

你这个输出就几次 漏了好多啊
回复 使用道具 举报

public class Test6 {

        public static void main(String[] args) {
                int in;
                int count= 0;
                for(in=100;in<=999;in++){
                        count = 0;
                        for(int i =2;i<in;i++){
                                if( in%i==0){
                                        count++;
                                }
                        }
                        if(count==0){
                                System.out.println(in);
                        }
                }
        }       
}
借鉴你们的意见,我写出来了,谢谢大家
回复 使用道具 举报
改好了,看我最先回复的那条内容,该的就是isPrimes里面的内容。
回复 使用道具 举报
学习了                                                      
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马