【问题标题】:Confused with Switch statement in Java对 Java 中的 Switch 语句感到困惑
【发布时间】:2021-02-23 19:38:16
【问题描述】:

谁能告诉我为什么在存款(案例 2)后案例 1 没有显示更新的余额。

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

}

【问题讨论】:

  • 你认为soldesCompteCheques = 250; 可能与此有关吗?

标签: java switch-statement


【解决方案1】:

在方法中声明的变量存在于整个方法调用中并在之后立即消除。如果您再次输入该方法,您将获得一个品牌的、新鲜的、新的副本。然后您立即将其设置为250 / 1000

基本上,您的案例 2 会将这些值设置为其他值,方法退出,然后您的更改就会消失在空中。

如果您想保留长期的东西,您需要字段,而不是局部变量。将double compte 和朋友移出直接在class X{} 声明中,在整个代码库中删除static everywhere(除了main,这是@987654327 的一种用途@ 你得到了,它的内容应该只有一行:new MyApp().go()。然后确保 250/1000 init 与它一起进入字段 decl,并从该方法的主体中删除。

【讨论】:

    【解决方案2】:

    soldesCompteCheques、soldesCompteEpargne 是该函数的局部变量,因此每次调用该函数时,它们都会被初始化为 250,1000,这就是为什么即使在进行存款后您也会看到相同的值。所以为了让他们得到更新,让他们成为全局变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-04
      相关资源
      最近更新 更多