Я пытаюсь сделать программу, которая будет принимать число и отображать простое число до и после него - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь создать программу, которая будет принимать пользовательский ввод в виде целого числа и будет отображать простое число до и после него.Я не вижу, что я сделал неправильно, так как на выходе ничего нет.Было бы здорово, если бы кто-нибудь мог помочь!

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 голосов
/ 06 июня 2018

Ваше условие в обоих циклах for оценивается как ложное.В первом случае:

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

Условие проверки является ложным на первой итерации, поскольку вы инициализировали j до num, и теперь вы проверяете, является ли j < num ложным.Следовательно, он никогда не входит в этот цикл.

Аналогично, во втором случае:

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
0 голосов
/ 06 июня 2018

Вот модифицированный рабочий код.

Внесены некоторые изменения: -

1. Инициализируется флаг в true, и если мы находим какой-либо фактор, просто возвращаем false.

2.Для нахождения большего простого числа просто начните бесконечный цикл с числа + 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;
            }
        }
    }
}

Надеюсь, это поможет!

...