简体   繁体   English

Java中变量的范围和传递值

[英]Scope of variables and Passing values in java

I'm trying to get better at using OOP with Java. 我正在尝试更好地在Java中使用OOP。 My goal in this exercise is to take user input and check if it is prime using an boolean method. 我在本练习中的目标是接受用户输入,并使用布尔方法检查它是否是主要输入。 I may have approached this wrong but any advice on what I've created would be most beneficial because I feel like I'm on the right track. 我可能走错了路,但是关于我所创建内容的任何建议都将是最有益的,因为我觉得自己处在正确的轨道上。

In this program I have two main problems 在这个程序中,我有两个主要问题

First, I would like to simply get the isPrime method to be error free. 首先,我想简单地使isPrime方法无错误。 With how I generally approach problems, I have a hard time setting up boolean methods. 关于我通常如何解决问题,我很难设置布尔方法。

The error comes in the last statement because prime variable has not been initialized. 该错误出现在最后一条语句中,因为素变量尚未初始化。 But I would like to get the verification whether the variable prime is true or false from the main if-else block though! 但是我想从if-else主块中验证变量prime是true还是false! Is there a way to get that value out of if-else block's scope? 有没有办法使该值超出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;
}

My second huge problem how do I call the isPrime method to print my desired results using user input? 我的第二个大问题是如何调用isPrime方法以使用用户输入来打印所需的结果?

I've been working on this for hours and I can fix one thing and then another error pops up somewhere. 我已经为此工作了好几个小时,可以解决一件事,然后在某个地方弹出另一个错误。

Here's the entire program. 这是整个程序。 The main method is bare because I erased my previous attempts to use the isPrime method. 主要方法是裸露的,因为我消除了以前使用isPrime方法的尝试。 Here it is: 这里是:

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;
    }
}

What happens if number is lesser than 2? 如果数字小于2会怎样? The variable prime is not defined because the code doesn't enter into the for loop. 由于代码没有进入for循环,因此未定义变量prime。 Try declaring prime as true by default and setting it to false when you reach that indeed it is not a prime number. 尝试默认将质数声明为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;
}

For your second question try: 对于第二个问题,请尝试:

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

When you print number + " is prime" in the else block, you don't yet know that the number is prime. 当您在else块中打印number + " is prime"时,您还不知道该数字是质数。 You only know that you haven't yet proven that it's composite. 您只知道尚未证明它是复合材料。 Also, you're probably unable to call isPrime because you've made it an instance method. 另外,您可能无法调用isPrime因为您已将其设为实例方法。 It should be static : 它应该是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;
}

Then inside your main() : 然后在您的main()

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

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

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