簡體   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