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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

要求:
2. 用户输入一个整数范围,程序列出该范围内的所有素数? 我调用。int[] isPrime(int a, int b)
没有能够装素数装入数组并返回。请问,我该怎么样做才能够返回一个全是素数的组啊?

代码:
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;


  4. public class Exp2 {
  5.         public static void main(String args[]) throws IOException{
  6.         //        new Exp2().judge1();
  7.                 new Exp2().judge2();
  8.         }
  9.         /*
  10.          * 一个区域的素数。
  11.          */
  12.         public void judge2() throws IOException{
  13.                 String line;
  14.                 int num;
  15.                 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  16.                
  17.                 line = br.readLine();
  18.                 String[] s = line.split(",");
  19.                 int a = Integer.parseInt(s[0]);
  20.                 int b = Integer.parseInt(s[1]);
  21.                 int[] result = isPrime(a,b);
  22.                 for(int i=0; i<result.length; i++){
  23.                         System.out.println(result[i]);
  24.                 }       
  25.         }
  26.        
  27.         /*
  28.          * 判断素数。
  29.          */
  30.         public static boolean isPrime(int a){
  31.                 int temp;
  32.                 temp = (int) Math.sqrt(a);
  33.                 for(int i=2; i<=temp; i++){
  34.                         if(temp%i==0){
  35.                                 return false;
  36.                         }
  37.                 }
  38.                 return true;
  39.         }
  40.         /*
  41.          * 求一个区域的素数。
  42.          */
  43.         public static int[] isPrime(int a, int b){
  44.                 int[] nums = new int[b-a];
  45.                 int pos = 0;
  46.                 for(int i=a; i<=b; i++){
  47.                         //判断素数,是?并装入
  48.                         if(isPrime(i)){
  49.                                 nums[pos++] = i;
  50.                         }
  51.                 }
  52.                 return nums;
  53.         }
  54. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

7 个回复

倒序浏览
很明显,你的
  1. /*
  2.          * 判断素数。
  3.          */
  4.         public static boolean isPrime(int a){
  5.                 int temp;
  6.                 temp = (int) Math.sqrt(a);
  7.                 for(int i=2; i<=temp; i++){
  8.                         if(temp%i==0){
  9.                                 return false;
  10.                         }
  11.                 }
  12.                 return true;
  13.         }
复制代码
这一块代码写错了,你可以测试下当你输入的时候判断的也是非素数,原因是temp = (int) Math.sqrt(a);这一句,  
如果输入是5,那么temp = 2,temp%2==0 ,返回ture
应该改为

public static boolean isPrime(int a){
                int temp;
                temp = (int) Math.sqrt(a);
                for(int i=2; i<=temp; i++){
                        if(a%i==0){
                                return false;
                        }
                }
                return true;
        }

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
孙辉辉 发表于 2012-12-17 14:50
很明显,你的这一块代码写错了,你可以测试下当你输入的时候判断的也是非素数,原因是temp = (int) Math.sq ...

谢谢。
我想再追加一个问:
我该怎么样定义一个数组,才能够恰好是我的素数的个数。?
或许我不应该使用其他容器。能提供一些方法吗?
int[] nums = new int[b-a];
                int pos = 0;
                for(int i=a; i<=b; i++){
                        //判断素数,是?并装入
                        if(isPrime(i)){
                                nums[pos++] = i;
回复 使用道具 举报
。。如果是直接用数组的话貌似不好直接获得是多少个,必须要跑完了才能知道是多少个,因此开始定义数组的时候需要定义的大一点,当然这样的话会存在很大的浪费,
回复 使用道具 举报
舒远 黑马帝 2012-12-17 16:34:53
报纸
你无法知道你的数组应该是多大。那么在遍历的时候就没法确定的创建出你想要的数组。
两种方案:
1.用StringBuilder或者SringBuffer来拼接你得到的素数。最后将这样的字符串转化成数组返回。
2.用集合临池存储最后将集合转化成数组。当然如果用集合了也就没必要再转成数组了。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
舒远 黑马帝 2012-12-17 16:37:11
地板
你以上的代码很有可能创建了一个数组却没有装入任何数据的情况。浪费空间。。就算按你那样创建数组也至少是
int[] nums = new int[b-a + 1] ;//这里需要+1,比如2-3范围的数组就有两个。。
回复 使用道具 举报
filter 中级黑马 2012-12-17 16:43:06
7#
public void judge2() throws IOException{

15.                String line;

16.                int num;

17.                BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

18.               

19.                line = br.readLine();

20.                String[] s = line.split(",");

21.                int a = Integer.parseInt(s[0]);

22.                int b = Integer.parseInt(s[1]);

23.                int[] result = isPrime(a,b);

24.                for(int i=0; i<result.length; i++){
                            if(result != 0)//加个判断
25.                             System.out.println(result);
}
数组长度在创建的时候就固定了,你要返回恰好是要的长度可以考虑集合或者StringBuffer容器

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
一并感谢大家的热情回复。我明白了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马