簡體   English   中英

與 Java 中的 Switch 語句混淆

[英]Confused with Switch statement in Java

有人可以告訴我為什么案例 1 在存款(案例 2)后沒有顯示更新的余額。

  1. 我已經在 switch 語句之前聲明並初始化了變量。
  2. 案例 1 - 顯示每個帳戶中的余額。
  3. 案例 2 - 進行存款時,將存款添加到變量 soldesCompteCheques 和 soldesCompteEpargne

問題 - 當我在存款后檢查余額(案例 1)時。 它仍然向我顯示原始余額(即 250 和 1000)。

謝謝

public static void traiterMenu(int optionChoisie) {
    double soldesCompteCheques;
    double soldesCompteEpargne;
    double depot;
    int compte;

    soldesCompteCheques = 250;
    soldesCompteEpargne = 1000;

    switch (optionChoisie) {
        case 1:
            System.out.println("Vous avez choisi option 1.");
            System.out.println("Votre soldes est:");
            System.out.println(String.format("%-30s %,12.2f$", "  >> Compte Chèque", soldesCompteCheques));
            System.out.println(String.format("%-30s %,12.2f$", "  >> Compte Épargne", soldesCompteEpargne));
            break;
        
        case 2:
            System.out.println("Vous avez choisi option 2.");
            System.out.println("Entrez un montant de dépôt:");
            depot = clavier.nextDouble();
            System.out.println("Dans quel compte voulez vous effectuer le dépôt?");
            System.out.println("1. Chèque");
            System.out.println("2. Épargne");
            compte = clavier.nextInt();
            switch (compte) {
                case 1:
                    soldesCompteCheques += depot;
                    System.out.println(String.format("Votre dépôt est completé. \n"
                                                   + "Le solde de votre compte Cheque est %,.2f$", soldesCompteCheques));
                    break;
                case 2:
                    soldesCompteEpargne += depot;
                    System.out.println(String.format("Votre dépôt est completé. \n"
                                                   + "Le solde de votre compte Epargne est %,.2f$", soldesCompteEpargne));
                    break;
                default:
                    System.out.println("Saisie erroneée.");
                    break;
            }
            break;
        
        default:
            System.out.println("Saisie erronnée. Veuillez réessayer.");
            break;
    }

}

在方法中聲明的變量存在於整個方法調用中,並且在之后立即被消除 如果您再次輸入該方法,您將獲得一個品牌的、新鮮的、新的副本。 然后您立即將其設置為250 / 1000

基本上,您的案例 2 會將這些值設置為其他值,方法退出,然后您的更改就會消失在空中。

如果你想保留長期的東西,你需要字段,而不是局部變量。 double compte和朋友移出直接在class X{}聲明中,在整個代碼庫中的任何地方都擺脫static (除了main ,這是static的一種用途,您只需要一行, new MyApp().go()然后確保 250/1000 init 與它一起進入字段 decl,並從該方法的主體中刪除。

soldesCompteCheques, soldesCompteEpargne 是 function 的局部變量,因此每次您調用 function 時,它們都會被初始化為 250,1000,這就是為什么即使在存款后您也會看到相同的值。 所以為了讓他們得到更新,讓他們成為全局變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM