我正在尝试制作一个程序,它将取一个数字并在它之前和之后显示素数

时间:2018-06-06 18:33:39

标签: java loops primes

我正在尝试创建一个程序,它将用户输入作为整数,并在它之前和之后显示素数。因为输出什么都没有,我看不出我做错了什么。如果有人可以帮忙的话会很棒!

package prime;
import java.util.Scanner;

public class Prime
{
    boolean flag = false;
    public boolean isPrime(int x)
    {
        for (int i = 2; i <= x/2; i++)
        {
            if (x % i == 0)
            {
                flag = true;
                return flag;
            }  
        }
    }
    public static void main(String [] abc)
    {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter an number. A prime number preceeding and succeeding that number will be displayed.");
        int num = sc.nextInt();

        Prime p = new Prime();

        for (int j = num;j < num && j > 0;j--)
        {
            if (p.isPrime(j-1) == true)
            {
                System.out.println("Prime number predeceeding " + num + " : " + j);
                break;
            }
        }
        for (int j = num;j > num;j++)
        {
            if (p.isPrime(j+1) == false)
            {
                System.out.println("Prime number succeeding " + num + " : " + j);
                break;
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

这是修改后的工作代码。

做了一些改变: -

1.Initialized flag为true,如果我们发现任何因素,则返回false。

2.为了找到更大的素数,只需从num + 1开始一个无限循环。但请确保输入数字在整数值范围内,即65535。

import java.util.Scanner;

public class Prime
{
    boolean flag = true;
    public boolean isPrime(int x)
    {
        for (int i = 2; i < x/2; i++)
        {
            if (x % i == 0)
            {
                return false;
            }  
        }
        return flag;
    }
    public static void main(String [] abc)
    {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter an number. A prime number preceeding and succeeding that number will be displayed.");
        int num = sc.nextInt();

        Prime p = new Prime();

        for (int j = num-1; j > 0; j--)
        {
            if (p.isPrime(j))
            {
                System.out.println("Prime number predeceeding " + num + " : " + j);
                break;
            }
        }
        for(int j=num+1; ;j++)
        {
            if (p.isPrime(j))
            {
                System.out.println("Prime number succeeding " + num + " : " + j);
                break;
            }
        }
    }
}

希望这有帮助!

答案 1 :(得分:0)

两个for循环的条件将评估为false。在第一种情况下:

for (int j = num;j < num && j > 0;j--)
// for(initialization; test-condition; updation)

第一次迭代中的测试条件为false,因为您已将j初始化为num,而您现在正在检查j < num是否为false。因此,它永远不会进入这个循环。

同样,在第二种情况下:

for (int j = num;j > num;j++)

您已将j初始化为num,现在正在检查j > num是否明显为假。因此,这个循环的内容也永远不会被执行。

您可以通过更改两个for循环中的初始化部分来解决这些问题(如@zenwraight所示):

for(int j = num-1; j > 0; j--) // first case
for(int j = num+1; ; j++)      // second case