通过方法查找整数因子时出错

时间:2014-10-07 05:30:46

标签: java eclipse

我的程序似乎与数字'25,223和11一起工作“但我不知道为什么它在我输入数字10或100时停止。任何想法?对此事的任何帮助将不胜感激 - 谢谢提前。

*****源代码*****

import java.util.Scanner;

public class hw_5 {

public static void main(String[] args) {
    Scanner inputReader = new Scanner(System.in);

    int num;
    boolean primeTest;

    System.out.print("Enter an integer value: ");
    num = inputReader.nextInt();

    if(num != -1) {
        primeTest = calcPrime(num);
        if(!primeTest) {

            System.out.println(num+" is not prime.");
            printFactors(num);
        }
    }

}


public static boolean calcPrime(int num) {

    for(int i = 2; i < num; i++) {

        if(num % i == 0)
            return true;    // If number is divisible by any number, return true.
    }

    return false;     // If loop exits (means, number was not divisible by any number), return false.
} 

public static void printFactors(int num) {

    int nFactors = 0;

    for(int i = 2; i < num; i++) {

        if(num % i == 0) {

            System.out.println(num+" is divisible by "+i); 
            nFactors++;
        }
    }

    System.out.println(num+" has "+nFactors+" factors");
}

}

3 个答案:

答案 0 :(得分:1)

import java.util.Scanner;



public class Test {

public static boolean calcPrime(int num) {

    for(int i = 2; i < num; i++) {

        if(num % i == 0)
            return false;    // If number is divisible by any number, return false.
    }

    return true;     // If loop exits (means, number was not divisible by any number), return true.
}  



public static void printFactors(int num) {

    int nFactors = 0;

    for(int i = 2; i < num; i++) {

        if(num % i == 0) {

            System.out.println(num+" is divisible by "+i); 
            nFactors++;
        }
    }

    System.out.println(num+" has "+nFactors+" factors");
}  


public static void main(String[] args) {

    Scanner inputReader = new Scanner(System.in);

    int num = 0;
    boolean primeTest = false;

    while(true) {

        System.out.print("Enter an integer value: ");
        num = inputReader.nextInt();

        if(num == -1)
            break;

        primeTest = calcPrime(num);

        if(primeTest)
            System.out.println(num+" is prime.");
        else {

            System.out.println(num+" is not prime.");
            printFactors(num);
        }
    }
}
}

答案 1 :(得分:0)

你的主要考试是错误的:

public static int calcPrime(int number) {
    int primer = number % 2;

    return primer;

}

它只测试数字是否为奇数。

答案 2 :(得分:0)

如果是素数,则下面的方法返回true,

   boolean isPrime(int n) {
        //check if n is a multiple of 2
        if (n%2==0) return false;
        //if not, then just check the odds
        for(int i=3;i*i<=n;i+=2) {
            if(n%i==0)
                return false;
        }
        return true;
    }

您可以将数字添加到list并在迭代时获取它们的值