变量的范围和java中的传递值

时间:2014-11-29 21:35:02

标签: java variables scope return-value primitive-types

我正在努力使用OOP和Java。我在这个练习中的目标是获取用户输入并使用布尔方法检查它是否为素数。我可能已经接近这个错误但是对我所创造的任何建议都是最有益的,因为我觉得我走在了正确的轨道上。

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

首先,我想简单地让isPrime方法没有错误。通过我通常如何处理问题,我很难设置布尔方法。

错误出现在最后一个语句中,因为尚未初始化主要变量。但是我想从主if-else块获得验证变量prime是真还是假!有没有办法从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 个答案:

答案 0 :(得分:0)

如果数字小于2,会发生什么?未定义变量prime,因为代码没有进入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);

答案 1 :(得分:0)

当您在number + " is prime"区块中打印else时,您还不知道该号码是素数。你只知道你还没有证明它是复合的。此外,您可能无法调用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)) {
    // ...
}