黑马程序员技术交流社区

标题: 请大神帮忙看看这道题。我自己写的,但是结果不对 [打印本页]

作者: 小五555    时间: 2013-7-2 16:46
标题: 请大神帮忙看看这道题。我自己写的,但是结果不对
package Text.cn;
import java.util.*;
/** * @author mmt * */public class TextDome2 {
        /**         * @param args         *找出比你输入的数字小的所有质数         */        public static void main(String[] args) {                // TODO Auto-generated method stub                Scanner s = new Scanner(System.in);                int a = s.nextInt();                ZhiShu(a);                        }                public static void ZhiShu(int a){                TreeSet<Integer> al = new TreeSet<>();                if (a == 1) {                        System.out.println("不是质数也不是合数");                }                if (a == 2) {                        System.out.println("其本身为质数且没有比它小的质数");                }                for(int x = 3;x <= a;x++){                        for(int y =2;y <= x-1;y++){                                if(x%y == 0){                                        continue;                                }else{                                        al.add(x);                                }                        }                }                                for (Iterator iterator = al.iterator(); iterator.hasNext();) {                     System.out.println(iterator.next());                }        }
}



作者: 小五555    时间: 2013-7-2 16:47
/**
*
*/
package Text.cn;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
import java.util.TreeSet;

/**
* @author mmt
*
*/
public class TextDome2 {

        /**
         * @param args
         *找出比你输入的数字小的所有质数
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                Scanner s = new Scanner(System.in);
                int a = s.nextInt();
                ZhiShu(a);
               
        }
       
        public static void ZhiShu(int a){
                TreeSet<Integer> al = new TreeSet<>();
                if (a == 1) {
                        System.out.println("不是质数也不是合数");
                }
                if (a == 2) {
                        System.out.println("其本身为质数且没有比它小的质数");
                }
                for(int x = 3;x <= a;x++){
                        for(int y =2;y <= x-1;y++){
                                if(x%y == 0){
                                        continue;
                                }else{
                                        al.add(x);
                                }
                        }
                }
               
                for (Iterator iterator = al.iterator(); iterator.hasNext();) {
                     System.out.println(iterator.next());
                }
        }

}
上面的弄错了。。。
作者: 肥猫    时间: 2013-7-2 17:12
本帖最后由 肥猫 于 2013-7-2 17:19 编辑

        看你上面代码的意思是由你自己手输一个数字,判断其是否为素数?如果是,则加如TreeSet中?那么既然要判断的数已经确定了,又为什么要定义双循环呢?还有,你认为AL里存了多少个数据?若是只存一个,则双循环没意义,若是多个,那么你应该实现的Comparable接口在哪?
作者: 黄少海    时间: 2013-7-2 17:44
本帖最后由 黄少海 于 2013-7-2 21:44 编辑

楼主判定质数的方法不简洁可以for循环直接放到main()中,方法直接改为返回值为boolean类型的。后面在main函数中直接用for循环进行判定调用比较方便。
  1. /**思路:从控制台输入一个值int类型的变量a。在对2到a之间的数进行判断,
  2. * 这时可以采用for循环。判定直接调用方法isPrime()进行判定。

  3. */
  4. package exercises;

  5. import java.util.Scanner;

  6. public class PrimeNumber {
  7.         
  8.         public static void main(String[] args){
  9.                 System.out.println("请输入一个数:");
  10.                 Scanner s = new Scanner(System.in);
  11.                 int a = s.nextInt();//从控制台输入一个int类型的整数
  12.                
  13.                 for(int x=2; x<=a; x++){//要判定的质数区间2到a之间
  14.                         if(isPrime(x)){//调用判定质数的方法
  15.                                 System.out.println(x); //打印结果
  16.                         
  17.                         }
  18.                         
  19.                 }
  20.         }
  21.         
  22.         
  23.         /**判定一个数是否是质数
  24.          * @param int n 接收一个int类型的变量。
  25.          * @return false 这个数不是质数
  26.          *                         true 这个数是质数
  27.          */
  28.         private static boolean isPrime(int n) {//判定一个数是否是质数

  29.                 for(int i=2; i<=n/2; i++){
  30.                         if(n%i==0){
  31.                                 return false;
  32.                         }
  33.                 }
  34.                 return true;
  35.         }

  36. }
复制代码

结果.png (7.67 KB, 下载次数: 0)

结果.png

作者: 小五555    时间: 2013-7-3 01:04
谢谢3楼
作者: Just_Only    时间: 2013-7-3 08:56
我擦,禽兽们怎么都这么快的啊,我来了帖子都审理完了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2