Java 为字母赋值并仅更改用户输入的字母

Java 为字母赋值并仅更改用户输入的字母,java,arrays,Java,Arrays,我在为字母数组赋值时遇到一些问题。我需要一个字符数组,该数组由所有字母组成,并具有字母表中位置的默认值 意思是字母“A”的值为1,字母“B”的值为2,字母“C”的值为3..等等 然后用户会选择他们想要赋值的字母。这意味着他们可以输入: C = -13 X = 5 H = 25 D = 4 只有这些字母的值才会改变。然后我需要将这些值应用于表达式 如果我的表达是: A*H+C 那么我的结果是: 十二, 因为:(1)(25)+-13=12 编辑:程序的最终目标是使用用户为变量输入的值来计算表达式,

我在为字母数组赋值时遇到一些问题。我需要一个字符数组,该数组由所有字母组成,并具有字母表中位置的默认值

意思是字母“A”的值为1,字母“B”的值为2,字母“C”的值为3..等等

然后用户会选择他们想要赋值的字母。这意味着他们可以输入:

C = -13
X = 5
H = 25
D = 4
只有这些字母的值才会改变。然后我需要将这些值应用于表达式

如果我的表达是: A*H+C

那么我的结果是: 十二,

因为:(1)(25)+-13=12

编辑:程序的最终目标是使用用户为变量输入的值来计算表达式,如果他们没有指定值,则使用我在数组中指定的默认值来计算表达式。答案必须是int类型,我必须使用数组或堆栈。

用户可以输入以下内容:

C = -13
X = 5
H = 25
D = 4
A*H+C
输出应为:

 Result: 12
字母的默认值必须如下所示:

C = -13
X = 5
H = 25
D = 4
A*H+C
A=1

B=2

C=3

。 . . Z=26

Character[]letterArray=newint[26];
//最初用值填充数组的步骤

对于(int i=0;i好的,这里有一些代码让您开始。我希望这些注释有助于解释逻辑。在用赋值替换字符后,您仍然需要弄清楚如何计算每个表达式,因为我基于此使用ScriptEngineManager

好的推荐信: 这是为了帮助计算使用堆栈的表达式,这是。我相信这些解决方案是有效的,您可以将其合并到代码中,而不是使用ScriptEngineManager,这对您的任务来说是一种过度使用

那么,给你:

public static void main(String[] args) throws ScriptException {

    int[] letterArray = new int[26];

    Scanner keyboard = new Scanner(System.in);
    boolean inUse = true;
    int num = 0;

    // initial assigning of characters
    for (int j = 0; j < letterArray.length; j++) {
        letterArray[j] = j + 1;

    }
    System.out.println("Default value of characters: ");
    printArray(letterArray);
    while (inUse) {

        System.out
                .println("enter 1 to change a value of a specific character..");
        System.out.println("enter 2 to compute an expression...");
        System.out.println("enter 3 or any other number to quit");

        System.out.print("Input: ");
        num = keyboard.nextInt();

        if (num == 1) {
            changeValue(letterArray, keyboard);
        } else if (num == 2) {
            System.out.println(computeExpression(keyboard, letterArray));
        } else {
            System.out.println("bye.");
            return;
        }

    }

}

public static void changeValue(int[] array, Scanner keyboard) {
    System.out
            .println("Enter the letter you will like to change: i.e A or B or C...");
    String character = keyboard.next().toUpperCase();
    // changing each input to upper-case to stay consistent
    // with the base value of 65
    int charnum = (int) character.charAt(0);
    if (Character.isLetter(character.charAt(0))) {
        System.out
                .println("Enter the value you are assigning to this character: ");

        array[charnum - 65] = keyboard.nextInt();
    } else {
        System.out
                .println("You entered an invalid character, sorry gotta start the process again");
    }

    System.out.println("Character Values: ");
    printArray(array);

}

// computing expression with ScriptEngineManager
// stole this from
// https://stackoverflow.com/questions/3422673/evaluating-a-math-expression-given-in-string-form
// this is where you will want to implement your stack-based logic to
// analyze the expression
// and compute the result after replacing each character with it's assigned
// value
public static int computeExpression(Scanner keyboard, int[] array)
        throws ScriptException {
    System.out.println("enter expression you will like to compute: ");

    String expr = keyboard.next();

    expr = replaceValues(array, expr);
    ScriptEngineManager mgr = new ScriptEngineManager();
    ScriptEngine engine = mgr.getEngineByName("JavaScript");
    // int result = Integer.parseInt((String) (engine.eval(expr)));
    return (Integer.parseInt(engine.eval(expr).toString()));
}

// replacing each character with assigned value
public static String replaceValues(int[] array, String expr) {
    expr = expr.toUpperCase();
    int position = 0;
    for (char c : expr.toCharArray()) {
        if (Character.isLetter(c)) {

            position = (int) c - 65;
            expr = expr.replace(Character.toString(c),
                    Integer.toString(array[position]));
        }
    }
    System.out.println(expr);
    return expr;
}

// printing out each character value
public static void printArray(int[] array) {
    int count = 0;
    for (int eachCh : array) {
        System.out.print((char) (65 + count) + "->" + eachCh + "|||");
        count++;
    }
    System.out.println();
}
publicstaticvoidmain(字符串[]args)引发脚本异常{
int[]letterArray=新int[26];
扫描仪键盘=新扫描仪(System.in);
布尔inUse=true;
int num=0;
//字符的初始分配
对于(int j=0;j”+eachCh+“| | | |”);
计数++;
}
System.out.println();
}

问题不清楚,也没有明确说明程序的最终目标。我的理解是,您希望对输入进行解析,并为特定字符“指定”一个值,以便对表达式进行硬编码?您的问题基本上是“我必须买房子,房价是1000万美元,现在我有1美元,下一步该怎么办?”如果用户输入C=-13,你可以使用
Map letterMap
存储字母数字关系,你可以
letterMap.put('C',-13)
这将改变
'C'
@Lashane的值,我在edit@Nomad我正试图通过只使用数组或堆栈来解决这个问题