Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我对检查一个数是否为素数的程序的逻辑有一个疑问。(我必须使用3种方法)_Java - Fatal编程技术网

Java 我对检查一个数是否为素数的程序的逻辑有一个疑问。(我必须使用3种方法)

Java 我对检查一个数是否为素数的程序的逻辑有一个疑问。(我必须使用3种方法),java,Java,我在实现3种方法来创建一个检查数字是否为素数的程序时遇到问题。当我调用我的方法并运行程序时,唯一显示的值是0。我假设这与我方法中的变量或逻辑有关 我尝试过使用不同的变量来存储用户输入,然后在我的方法中使用该变量作为参数 包装实践; 导入java.util.Scanner; 公共课堂实践{ 静态扫描仪s=新扫描仪(System.in); 公共静态void main(字符串[]args){ //int result=0;//存储用户选择的数量 int numPicked=0// int endRes

我在实现3种方法来创建一个检查数字是否为素数的程序时遇到问题。当我调用我的方法并运行程序时,唯一显示的值是
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;
    }