我正在尝试制作一个接受两个数字的程序,并在其间找到素数,偶数和奇数

时间:2018-06-06 16:57:47

标签: java

我正在尝试制作一个接受起始编号和结束编号(int)的程序,并在其间找到素数,偶数和奇数。我无法正确设置if和else条件。如果有人能告诉我一个更简单的方法,那就太棒了。

package proj2;
import java.util.Scanner;


public class Proj2
{
    public void number(int sn,int en)
    {
        if (sn <= en)
        {   
            int number = 2;
            if (sn > number && sn % number != 0)
            {
                System.out.println(sn + " : " + "Prime");
                number++;
                sn++;
                number(sn++,en);
            }
            else if (sn % 2 == 0)
            {
                System.out.println(sn + " : " + "Even");
                sn++;
                number(sn++,en);
            }
            else
            {
                System.out.println(sn + " : " + "Odd");
                sn++;
                number(sn,en);
            }
        }
    }

    public static void main(String [] abc)
    {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter the starting number:");
        int x = sc.nextInt();
        System.out.println("Enter the ending number:");
        int y = sc.nextInt();

        Proj2 p = new Proj2();
        p.number(x,y);     
    }
}

1 个答案:

答案 0 :(得分:1)

素数和奇数不是互斥的,你的素性测试是不正确的,你递归地调用number()。而是使用:

private boolean isPrime(int num){
    // assuming positive ints
    if( num <= 2 || num % 2 == 0) 
        return false;
    for(int divisor = 3; divisor <= (int)Math.pow(num, 0.5); divisor+=2)
        if( num % divisor == 0) 
            return false;
    return true
}

public void number(int start, int end){
    if( start <= end ){
        for( int curr = start; curr <= end; curr++ ){
            if( curr % 2 == 1 ) {
                System.out.println(curr + " : Odd");
                if(isPrime(curr))
                    System.out.println(curr + " : Prime");
            } else System.out.println(curr + " : Even");
        }
    }