java - 向一个方法发送数据,并一一检查
问题描述
我遇到了用 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 结束
解决方案
把打印出来的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;
}
}
推荐阅读
- charts - 将谷歌图表 vAxis 格式化为货币
- mysql - Sql:在 STR_TO_DATE 范围内选择
- spring - 我在邮递员上收到此错误:“状态”:404,“错误”:“未找到”,“消息”:“没有可用消息”,
- c - 到达断点时 gdb 不提供回溯,但在命令文件中指定
- pandas - 根据匹配 ID 创建新列
- c - arduino uno上的多个开关盒问题
- python - Python 正则表达式匹配不包含字符串的行
- javascript - 当鼠标移动状态发生变化时反应样式化组件的低性能
- python - 如何使用堆栈实现将此 BFS 代码转换为 DFS 和 UCS..?
- python-3.x - 如何删除列python最小值之前的两行和之后的两行