首页 > 解决方案 > 向一个方法发送数据,并一一检查

问题描述

我遇到了用 Java 制作 Ulam Spiral 的挑战,但在创建 Ulam Spiral 之前,用户应该输入 2 个数字。应该检查这两个数字,以免它们不是素数。只要写入的数字之一是质数,程序就应该重新启动并请求 2 个新数字。

getInput 方法要求用户输入 2 个数字。写完这些数字之后,应该调用 isPrime 方法,并一次检查一个数字是否为素数。如果检查的第一个数字不是素数,则应检查第二个数字,如果也不是素数,则应调用下一个方法。我不明白的是我拥有的 isPrime 方法。它检查数字,但是如果第一个不是素数,我该怎么做,然后检查下一个数字,只要它们都不是素数,那么我们就可以了。我可以让 isPrime 方法接受两个数字并检查它们,但我不允许这样做,我必须一次检查一个数字。

在这里,您可以看到我的 getInput 和 isPrime 方法。是的,我知道 isPrime(firstNumber); isPrime(secondsNumber); 在我的主要方法中很奇怪,它不应该是那样的,不是吗?这是更好的方法吗?

public class UlamSpiral {

    private static int firstNumber, secondNumber;
    private static Scanner scanner = new Scanner(System.in);
    private static boolean flag = false;

    public static void main(String[] args) {

        getInput();
        isPrime(firstNumber);
        isPrime(secondsNumber);
    }

    public static void getInput() {

        System.out.println("Enter two non-prime numbers");
        firstNumber = scanner.nextInt();
        secondNumber = scanner.nextInt();
    }

    public static boolean isPrime(int num) {

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

            // Condition for non-prime number.
            if(num % i == 0) {
                flag = true;
                break;
            }
        }

        if (!flag)
            System.out.println(num + " Atleast one of the numbers are a prime number.");

        return true;
    }

编辑: 1.
这就是我现在所拥有的,但它不能正常工作。
当程序启动时,我写了 2 个质数,例如 3、5,然后它告诉我其中一个数字是质数并重新启动程序。
秒时间,如果我写 3、4,那么即使 3 是质数,程序也会继续。

public static void main(String[] args) {

    getInput();
    if(isPrime(firstNumber) || isPrime(secondNumber)){
        System.out.println("Atleast one of the numbers are a prime number.");
        getInput();
    } else {
        isMax(firstNumber, secondNumber);
    }

public static void getInput() {

    System.out.println("Enter two non-prime numbers");
    firstNumber = scanner.nextInt();
    secondNumber = scanner.nextInt();
}

public static boolean isPrime(int num) {
    boolean flag = true;

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

        // Condition for non-prime number.
        if (num % i == 0) {
            flag = false;
            break;
        }
    }
    return flag;
}

输出:

输入两个非素数 3 5 至少其中一个是素数。输入两个非质数 3 4

进程以退出代码 0 结束

标签: javaarraysmethodsjava-8

解决方案


把打印出来的isPrime方法和两个数字都核对后就可以了。重构代码如下:

public class UlamSpiral {

    private static int firstNumber, secondNumber;
    private static Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {

        getInput();
        if(isPrime(firstNumber) || isPrime(secondNumber)){
            System.out.println("Atleast one of the numbers are a prime number.");
        } else {
           //scenario when none are prime
        }

    }

    public static void getInput() {

        System.out.println("Enter two non-prime numbers");
        firstNumber = scanner.nextInt();
        secondNumber = scanner.nextInt();
    }

    public static boolean isPrime(int num) {
        boolean flag = false;

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

            // Condition for non-prime number.
            if(num % i == 0) {
                flag = true;
                break;
            }
        }

        return flag;
    }
}

推荐阅读