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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小痞痞 高级黑马   /  2013-9-21 19:52  /  1619 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小痞痞 于 2013-9-24 16:48 编辑

要求;输入一个数输出这个书能被分解成那两个质数的和
  1. import java.util.Scanner;
  2. class PrimeNum {        
  3.                 public static void main(String[] args) {
  4.                         System.out.println("请输入一个整数:");
  5.                         Scanner sc = new Scanner(System.in);
  6.                         int x = sc.nextInt();
  7.                         
  8.                         for (int i = 1;i <= x/2; i++) { //分解输入的数
  9.                                 int a = i;
  10.                                 int b = x - i;

  11.                                 if (isPrime(a) && isPrime(b))  {
  12.                                         System.out.println(x + "=" + a + " + " +b);
  13.                                 }
  14.                                 
  15.                         }
  16.                 }
  17.                 //判断一个数是否是质数
  18.                 public static boolean isPrime(int a) {
  19.                         for (int i = 2;i < i-1 ;i++ ) {
  20.                                 if (a % i == 0)        return false;
  21.                         }
  22.                         return true;
  23.                 }
  24. }
复制代码
这个代码那块出问题了啊???
可以查分出来   但是拆除来所有的都输出出来了

求解怎么修改才行啊

评分

参与人数 1技术分 +1 收起 理由
曹秀云 + 1 神马都是浮云

查看全部评分

4 个回复

倒序浏览
刚刚测试了你的代码,你的质数判断方法出现了一个初学者常犯的错误,应该说是你自己的粗心吧! for (int i = 2;i < i-1 ;i++ ) {    这一行代码, 应该将 i - 1 改成 a -  1,如果不改,直接返回false。改了的话就可以得到你想要的结果!!!如果不是追求高效率的话这样的算法也可以,稍微增加点效率的话可以改成:

// 判断一个数是否是质数
        public static boolean isPrime(int a) {
                for (int i = 2; i <= Math.sqrt(a); i++) {
                        if ((a % i) == 0){
                                return false;
                        }
                }
                return true;
        }

以后别那么粗心哦亲!再出现这样的问题冷静点思考就行了、、、

评分

参与人数 1技术分 +1 收起 理由
黄文伯 + 1

查看全部评分

回复 使用道具 举报 1 0
判断是否为素数的方法中,应该将for循环里面这样写  for(int i=2;i< a\2 ; i++)其他的不用变,判断素数不用非要从2----X-1都遍历一遍,只要遍历到x/2就行。

评分

参与人数 1技术分 +1 收起 理由
黄文伯 + 1

查看全部评分

回复 使用道具 举报
亲,如问题已解决请将分类的“未解决”改为“已解决”。
以后的问题贴也要及时更改分类哦~
回复 使用道具 举报
  1. import java.util.HashSet;

  2. import java.util.Scanner;

  3. public class Demo1 {
  4.         public static void main(String[] args) {
  5.                 System.out.println("请输入一个整数:");
  6.                 Scanner sc = new Scanner(System.in);
  7.                 int getNum = sc.nextInt();

  8.                 getPrime(getNum);// 调用函数

  9.         }

  10.         private static void getPrime(int num) {
  11.                 HashSet<Integer> set = new HashSet<Integer>();// 定义集合 用来存放1到num的质数

  12.                 set.add(2);// 2是质数也是约数

  13.                 // 如果除开1和本身外没有其他的数整除就是质数
  14.                 for (int i = 1; i <= num; i++) {
  15.                         for (int j = 1; j <= i; j++) {
  16.                                 if (i == 1)
  17.                                         continue;
  18.                                 if (i == num)
  19.                                         continue;
  20.                                 if (i % j != 0)
  21.                                         set.add(i);// 讲1到num的质数存放在集合
  22.                         }
  23.                 }

  24.                 // 定义数组将集合中的数存入数组
  25.                 int[] arr = new int[set.size()];
  26.                 int m = 0;
  27.                 for (Integer i : set) {

  28.                         arr[m++] = i;
  29.                 }

  30.                 // 循环 如果满足2质数相加等于num 则输出,没有则输出没有
  31.                 for (int i = 0; i < arr.length - 1; i++) {
  32.                         for (int j = i + 1; j < arr.length; j++) {
  33.                                 if ((arr[i] + arr[j]) == num) {
  34.                                         System.out.println("第一个数为: " + arr[i]);
  35.                                         System.out.println("第二个数为: " + arr[j]);
  36.                                 }
  37.                         }

  38.                 }

  39.         }
  40. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马