Java 为字母赋值并仅更改用户输入的字母
我在为字母数组赋值时遇到一些问题。我需要一个字符数组,该数组由所有字母组成,并具有字母表中位置的默认值 意思是字母“A”的值为1,字母“B”的值为2,字母“C”的值为3..等等 然后用户会选择他们想要赋值的字母。这意味着他们可以输入: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 编辑:程序的最终目标是使用用户为变量输入的值来计算表达式,
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我正试图通过只使用数组或堆栈来解决这个问题