Java 我对检查一个数是否为素数的程序的逻辑有一个疑问。(我必须使用3种方法)
我在实现3种方法来创建一个检查数字是否为素数的程序时遇到问题。当我调用我的方法并运行程序时,唯一显示的值是Java 我对检查一个数是否为素数的程序的逻辑有一个疑问。(我必须使用3种方法),java,Java,我在实现3种方法来创建一个检查数字是否为素数的程序时遇到问题。当我调用我的方法并运行程序时,唯一显示的值是0。我假设这与我方法中的变量或逻辑有关 我尝试过使用不同的变量来存储用户输入,然后在我的方法中使用该变量作为参数 包装实践; 导入java.util.Scanner; 公共课堂实践{ 静态扫描仪s=新扫描仪(System.in); 公共静态void main(字符串[]args){ //int result=0;//存储用户选择的数量 int numPicked=0// int endRes
0
。我假设这与我方法中的变量或逻辑有关
我尝试过使用不同的变量来存储用户输入,然后在我的方法中使用该变量作为参数
包装实践;
导入java.util.Scanner;
公共课堂实践{
静态扫描仪s=新扫描仪(System.in);
公共静态void main(字符串[]args){
//int result=0;//存储用户选择的数量
int numPicked=0//
int endResults=0;//存储计算结果
//调用方法
iPrime(numPicked);
pickedNum(numPicked);
结果(endResults);
}
//方法检查数字是否为素数
公共静态布尔值isPrime(int numPicked){
如果(numPicked)
注释掉endResults,因为它当前没有任何功能
//int endResults = 0; //stores result of calculation
添加了一个布尔值来记录isPrime是true还是false
boolean isPrime;
numPicked现在存储pickedNum方法的返回值,并且不接受任何参数
// Calling methods
numPicked = pickedNum();
isPrime = isPrime(numPicked);
将布尔值传递给results方法,true或false
results(numPicked, isPrime);
}
// Method to check if numbers are prime
public static boolean isPrime(int numPicked)
{
if (numPicked <= 1) {
return false;
}
我对你的代码做了一些修改,工作版本如下。有很多东西也应该更改,但我试图让你的程序在没有大的更改的情况下工作
首先,你有两个扫描器,所以我删除了其中一个。第二件事是你的isPrime方法工作不正常,所以我将其替换为工作版本。另一件事是你在加载值之前调用了isPrime,这是你总是得到0的主要问题。另一件事是java是通过值传递的,这意味着如果你把int作为参数nt,然后在方法中修改它,仍然有旧值,所以必须再次将返回值分配给值
static Scanner s = new Scanner(System.in);
public static void main(String[] args) {
//int result = 0 ; //stores number user picks
int numPicked = 0; //
boolean isPrime = false;
// Calling methods
numPicked = pickedNum();
isPrime = isPrime(numPicked);
results(numPicked, isPrime);
}
// Method to check if numbers are prime
public static boolean isPrime(int numPicked) {
if (numPicked == 2)
return true;
if (numPicked < 2 || numPicked % 2 == 0)
return false;
for (int i = 3; i * i <= numPicked; i += 2)
if (numPicked % i == 0)
return false;
return true;
}
// Method that asks user for a positive integer
public static int pickedNum()
{
System.out.println("Type a positive number that you want to know if it's prime or not.");
int numPicked = s.nextInt();
return numPicked;
}
// Method that displays result of calculation
public static int results (int numPicked, boolean isPrime)
{
if(isPrime)
{
System.out.println( numPicked + " is a Prime Number");
}
else
{
System.out.println(numPicked + " is Not a Prime Number");
}
return numPicked;
}
static Scanner s=新的扫描仪(System.in);
公共静态void main(字符串[]args){
//int result=0;//存储用户选择的数量
int numPicked=0//
布尔isPrime=false;
//调用方法
numPicked=pickedNum();
iPrime=iPrime(未加标记);
结果(numPicked,iPrime);
}
//方法检查数字是否为素数
公共静态布尔值isPrime(int numPicked){
如果(numPicked==2)
返回true;
如果(numPicked<2 | | numPicked%2==0)
返回false;
对于(int i=3;i*i的可能副本请参见此。查看在主方法中调用方法的顺序。首先调用isPrime
,并将硬编码值0传递给它。然后获得用户输入,但从不将其存储在变量中。然后根据初始硬编码的0打印结果。需要获得e首先用户输入,将其存储在变量中,将该变量传递给isPrime
方法,存储该方法的返回值,然后将该值传递给results
方法。此外,results
方法总是说0是素数,非零数不是素数。它应该使用isPr中的布尔值ime
@johnny 5对于大于1的数字和偶数,您在哪里看到返回true
?他的问题是他只是忽略了从方法中得到的任何结果。@johnny 5在最后一行之前,if
语句对于小于1
的任何值都将返回false
,因此它将被忽略到达该行后,for
循环将返回所有偶数值的false
,因为在第一次循环迭代中,numPicked%i==0
。谢谢,这帮助我理解了它。还有一个问题。这个for循环做什么?for(int i=3;i*i@ElizaDelgado我刚刚很快找到了一些算法来检查它是否为素数。它来自以下链接:
for (int i = 2; i < numPicked; i++) {
if (numPicked % i == 0) {
return false;
}
}
return true;
}
// Method that asks user for a positive integer
public static int pickedNum ()
{
Scanner s = new Scanner(System.in);
System.out.println("Type a positive number that you want to know if it's prime or not.");
int numPicked = s.nextInt();
return numPicked;
}
// Method that displays result of calculation
public static int results (int numPicked, boolean isPrime)
{
if(isPrime)
{
System.out.println( numPicked + " is a Prime Number");
}
else
{
System.out.println(numPicked + " is Not a Prime Number");
}
return numPicked;
}
}
static Scanner s = new Scanner(System.in);
public static void main(String[] args) {
//int result = 0 ; //stores number user picks
int numPicked = 0; //
boolean isPrime = false;
// Calling methods
numPicked = pickedNum();
isPrime = isPrime(numPicked);
results(numPicked, isPrime);
}
// Method to check if numbers are prime
public static boolean isPrime(int numPicked) {
if (numPicked == 2)
return true;
if (numPicked < 2 || numPicked % 2 == 0)
return false;
for (int i = 3; i * i <= numPicked; i += 2)
if (numPicked % i == 0)
return false;
return true;
}
// Method that asks user for a positive integer
public static int pickedNum()
{
System.out.println("Type a positive number that you want to know if it's prime or not.");
int numPicked = s.nextInt();
return numPicked;
}
// Method that displays result of calculation
public static int results (int numPicked, boolean isPrime)
{
if(isPrime)
{
System.out.println( numPicked + " is a Prime Number");
}
else
{
System.out.println(numPicked + " is Not a Prime Number");
}
return numPicked;
}