试图限制用户只输入素数

时间:2013-11-28 10:41:55

标签: java validation

我正在创建一个对消息进行编码和解码的应用程序。我使用RSA加密技术,所以我需要使用素数。我已经想出如何使用方法判断数字是否为素数

public int checkPrime(int number)
    {
        //Is this number greater than 0
            for(int i = number-1; i > 0; i--)
            {
                if((number % i) == 0) 
                {
                        if(i == 1)
                        {
                            System.out.println("is a prime");
                        isPrime = true;
                        }
                        else
                        {
                            System.out.println("is not a prime");
                        isPrime = false;
                        }
                        break;
                }  
             }
             return number;
    }

所以这打印出来是否是巅峰时期。 但我想要做的是不断向用户询问一个数字,如果它不是素数。 我要求用户在名为MenuMethods的类中输入输入,然后将其响应设置为变量,然后创建Encrypt类的实例。

//---------------------------------------------------------------------------------------
//  Name:        userInput
//  Description: This method is used in the MainApp to give the user capability to enter
//               the details when adding details of an employee into the store.
//---------------------------------------------------------------------------------------
    public static Encrypt userInput() 
    {
        //String temp = keyboard.nextLine();
        Encrypt encrypt = new Encrypt();
        System.out.println("Please enter the Public Key: ");
        int publicKey = keyboard.nextInt();
        encrypt.checkPrime(publicKey);
        System.out.println("Please enter the Private Key: ");
        int privateKey = keyboard.nextInt();
        encrypt.checkPrime(privateKey);
        return encrypt = new Encrypt(publicKey,privateKey);
    }   

有人可以帮我解决这个问题....

4 个答案:

答案 0 :(得分:2)

您想要做的是使用while循环:

while(!checkPrime(input)) {       
    System.out.println("Please enter a prime number: ");
    input = keyboard.nextInt();
}

并将checkPrime的返回值更改为布尔值。

同样,对于检查素数,如果你检查你的号码n是否可以被2和sqrt(n)之间的数字分割就足够了。

答案 1 :(得分:2)

让你的checkPrime方法有一个布尔返回类型,如果是prime则返回true,否则返回false,如下所示:

public boolean checkPrime(int n)
{
    boolean ret = true;
    for(int i = 2; i<=((int)Math.sqrt(n));i++)
    {
        if(n%i==0)
        {
            ret = false;
            break;
        }
    }
    return ret;
}

然后使用类似于此的while循环:

int n = 4; //or any non-prime value
while(!checkPrime(n))
{
    n = /*input*/;
}

答案 2 :(得分:1)

int number;
do{
   System.out.print("give a prime number:");
   numnber=getNumber();
}while(!checkPrime(number));

答案 3 :(得分:0)

  1. 您只需要检查i到c = Math.sqrt(数字)
  2. 如果每个i(从2到c)为真,则数字为素数:数字%i!= 0
  3. 以下代码检查数字是否为素数:

    boolean isPrime = false;
    for (int i = 2; i <= c; i++)
    {
        if (number % i != 0) 
        {
             isPrime = false;
             break;
        }    
    }