【问题标题】:Accessing a returned value from a different case从不同的情况下访问返回的值
【发布时间】:2013-05-13 21:12:09
【问题描述】:

嗨,这是我第三次在这个论坛上发布这个问题,到目前为止,没有人能够就这种情况向我提供启发。

我只在此处粘贴了重要的代码,并将尽我所能解释...

方法:

  1. showMenu(in) - show 是一个菜单列表,它也调用了 choice(in)
  2. choice(in) - 通过 -> getNumber(in) 接受 in 输入
  3. getNumber(in) - 是返回的数字,现在选择正确的大小写

现在我只处理案例 1:和案例 2:

案例一:

  1. 字符串谱号 = 从 saisirClef(in) 分配的返回值
  2. saisirClef(in);是完成逻辑后返回字符串的方法
  3. 需要showMenu(in),所以我现在可以选择不同的情况

案例 2: 简单我试图在案例1完成后访问字符串; 如果不是,那么我应该通过案例 1

这可以做到吗? 我觉得每次通过休息时我的所有变量都消失了这是正常的吗?

我该怎么做?

public static void choice(Scanner in){

    switch(getNumber(in)){
        case 1:
            String clef = saisirClef(in);
            showMenu(in);
            break;
        case 2:
            if(clef.isEmpty()){
                System.out.println("Erreur : Aucune clef n’a été saisie.");
                saisirClef(in);
            }
            else{
                afficherClef(clef);
            }
            break;
        case 3:
            chiffrerFichier();
            break;
        case 4:
            dechiffrerFichier();
            break;
        case 5:
            quitApplication();
            break;
        default:
            System.out.println("Default");
            break;
        }
    }

【问题讨论】:

    标签: java if-statement switch-statement return-value scope


    【解决方案1】:

    试试这个:

    private static String clef = null;
    
    public static void choice(Scanner in){
    
        switch(getNumber(in)){
            case 1:
                clef = saisirClef(in);
                showMenu(in);
                break;
            case 2:
                if(clef == null || clef.isEmpty()){
                    System.out.println("Erreur : Aucune clef n’a été saisie.");
                    clef = saisirClef(in);
                }
                else{
                    afficherClef(clef);
                }
                break;
                        // ...
        }
    

    【讨论】:

    • 为什么要在 case 2 的 if 语句中添加clef = null;
    • 因为如果你不这样做,而你得到 1、2、2,你将再次重新 saisirClef。如果这是所需的行为,那么只需删除 clef = null;
    • 实际上,想要的行为是存储clef = saisirClef(in);,因为saisirClef 在经过一系列测试后会返回一个字符串......仍然无法按预期工作......但有所改进
    • 我刚刚编辑了我的答案以适应您提供的信息。请尝试一下。
    • 刚刚尝试过...它属于Erreur : Aucune clef n’a été saisie. Saisir la clef secrète : 如果我通过案例1并保存密钥,这是错误的,然后再次弹出菜单,现在我通过案例2它显示为空......是否有可能因为我从未达到案例 1 的休息时间?
    猜你喜欢
    • 2010-11-25
    • 2013-01-11
    • 1970-01-01
    • 2022-09-23
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 2012-01-11
    相关资源
    最近更新 更多