繁体   English   中英

Java中变量的范围和传递值

[英]Scope of variables and Passing values in java

我正在尝试更好地在Java中使用OOP。 我在本练习中的目标是接受用户输入,并使用布尔方法检查它是否是主要输入。 我可能走错了路,但是关于我所创建内容的任何建议都将是最有益的,因为我觉得自己处在正确的轨道上。

在这个程序中,我有两个主要问题

首先,我想简单地使isPrime方法无错误。 关于我通常如何解决问题,我很难设置布尔方法。

该错误出现在最后一条语句中,因为素变量尚未初始化。 但是我想从if-else主块中验证变量prime是true还是false! 有没有办法使该值超出if-else块的范围?

public boolean isPrime(int number){
    boolean prime;
    if(number == 2){
        System.out.println( number + " is prime");
        prime = true;
    } else{
        for(int i = 2; i < number; i++){
            if( number % i == 0){
                System.out.println(number + " is composite");
                prime = false;
                break;
            } else
                System.out.println( number + " is prime");
            prime = true;
       }
    }

    return prime;
}

我的第二个大问题是如何调用isPrime方法以使用用户输入来打印所需的结果?

我已经为此工作了好几个小时,可以解决一件事,然后在某个地方弹出另一个错误。

这是整个程序。 主要方法是裸露的,因为我消除了以前使用isPrime方法的尝试。 这里是:

import java.util.*;

public class PrimeChecker{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out
           .println("Enter a number to see if it is Prime or Composite: ");
        int check = sc.nextInt();
        sc.close();
    }

    public boolean isPrime(int number){
        boolean prime;
        if(number == 2){
            System.out.println( number + " is prime");
            prime = true;
        } else{
            for(int i = 2; i < number; i++){
                if( number % i == 0){
                    System.out.println(number + " is composite");
                    prime = false;
                    break;
                } else
                    System.out.println( number + " is prime");
                prime = true;
           }
        }

        return prime;
    }
}

如果数字小于2会怎样? 由于代码没有进入for循环,因此未定义变量prime。 尝试默认将质数声明为true,并在发现确实不是质数时将其设置为false。

public boolean isPrime(int number){
     boolean prime = true;
           if(number == 2){
               System.out.println( number + " is prime");
               prime = true;
           }    else{
                       for(int i = 2; i < number; i++){
                            if( number % i == 0){
                                System.out.println(number + " is composite");
                                prime = false;
                                break;
                            }
                       }

                }
    return prime;
}

对于第二个问题,请尝试:

PrimeChecker checker = new PrimeChecker();
boolean isPrime = checker.isPrime(check);

当您在else块中打印number + " is prime"时,您还不知道该数字是质数。 您只知道尚未证明它是复合材料。 另外,您可能无法调用isPrime因为您已将其设为实例方法。 它应该是static

public static boolean isPrime(int number){
    if (number != 2) {
        for (int i = 2; i < number; i++) {
            if (number % i == 0) {
                System.out.println(number + " is composite");
                return false;
            }
        }
    }
    System.out.println(number + " is prime");
    return true;
}

然后在您的main()

if (isPrime(check)) {
    // ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM