【问题标题】:How would I use the result of a variable as a variable rather than plain text我如何将变量的结果用作变量而不是纯文本
【发布时间】:2018-04-13 18:36:58
【问题描述】:

我遇到的问题是“slowRotor”返回值“Rotor_I”。

我想使用slowRotor (Rotor_I) 的结果作为变量Rotor_I,而不是可以这么说的“纯文本”。

我想知道这在 Java 中是否可行,如果可以,如何实现(因为我试图避免使用大量 if 语句)

    String slowRotor = GUI.getRotorInPosition("slow");
    int position = (alphabet.indexOf(result));
    String resultAfterRotor = "";
    if (Rotor == "Slow") {          
        resultAfterRotor = Character.toString((slowRotor.charAt(position))); 
    }

static String alphabet ="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
static String Rotor_I = "EKMFLGDQVZNTOWYHXUSPAIBRCJ";   

【问题讨论】:

  • Java 中没有eval。但是,我怀疑您在这里遇到了 X/Y 问题,所以也许您可以编辑问题以提供有关您要完成的任务的更多详细信息。
  • 我看到的一个问题是您尝试使用 == 而不是 string.equals(otherstring) 比较字符串
  • 我认为如果没有 if 语句就无法做到这一点。但是,那 ?运算符可能是您可以使用的“短” if 语句。 stackoverflow.com/questions/3085681/java-operator
  • @CoreyFord 在 Java 中,您始终可以使用 if 代替三元运算符。

标签: java variables if-statement


【解决方案1】:

我不完全知道您想要什么,我们可以使用更多解释,但我猜您的代码将类似于:

if (rotor.equals("Slow")) {          
    resultAfterRotor = Character.toString((slowRotor.charAt(position))); 
} else if (rotor.equals("Medium")) {
    resultAfterRotor = // ... something else
} else if (rotor.equals("Fast")) {
    resultAfterRotor = // ... something else
}
// ...

相反,您可以使用 switch 语句来避免对每种情况进行比较,就像使用 if-else-if-else-if 一样。 (尽管在少数情况下(大约 3 个),switch 将编译为 if-else 字节码,因为我猜这是最快的):

private final static String slowRotor = "EKMFLGDQVZNTOWYHXUSPAIBRCJ";
private final static String mediumRotor = "...";
private final static String fastRotor = "...";

public static void main(String[] args){
    String rotor = GUI.getRotorInPosition("slow");
    int position = (alphabet.indexOf(result));
    String resultAfterRotor = getResultAfterRotor(rotor);
    // ...
}

private String getResultAfterRotor(String rotor) {
    switch(rotor){
        case "Slow": {
            return Character.toString(slowRotor.charAt(position)); 
        }
        case "Medium": {
            return Character.toString(mediumRotor.charAt(position)); 
        }
        case "Fast": {
            return Character.toString(fastRotor.charAt(position)); 
        }
    }
}

或者你可以使用地图

private static final Map<String, String> rotorMap = new HashMap<>();
static {
    rotorMap.put("Slow", "EKMFLGDQVZNTOWYHXUSPAIBRCJ");
    rotorMap.put("Slow2", "...");
    rotorMap.put("Slow3", "...");
}

public static void main(String[] args){
    String slowRotor = GUI.getRotorInPosition("slow");
    int position = (alphabet.indexOf(result));
    String resultAfterRotor = Character.toString(rotorMap.get(slowRotor).charAt(position));
    // ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-31
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多