gpt4 book ai didi

java - 为什么当我连续输入 2 个以上的整数时,我的前缀运算程序不工作?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:06:00 24 4
gpt4 key购买 nike

当我只在一行中输入 1 或 2 个整数时,我的程序可以正常工作,例如:+ 13 24 或 * 4 - 165 235。但是如果我输入 % * 5 12 8,它不会给我正确的答案。我怎样才能改变我的循环,以便它在一行中有更长的整数字符串时工作。给定前缀符号的操作顺序和格式? *我的堆栈类及其方法可以正常工作。

    import java.util.*;
public class part1Main {

public static void main(String[] args) {
// Reference variables
String temp2;
int num, num1, num2, ch;
char op;
@SuppressWarnings("resource")
Scanner keyboard = new Scanner(System.in);
PrefixStack<Character> operands = new PrefixStack<Character>();
PrefixStack<Integer> S = new PrefixStack<Integer>();

System.out.print("Do you want to perform a prefix operation?");
System.out.print(" 1 for yes or 0 to quit: ");
ch = keyboard.nextInt();
temp2 = keyboard.nextLine();

while(ch != 0){
System.out.print('\n'+ "Enter the operation with a space between "
+ "each character. End your operation with a period: ");

while(keyboard.hasNext()){
if (keyboard.hasNextInt()){
num = keyboard.nextInt();
S.push(num);}
else{
temp2 = keyboard.next();
switch(temp2.charAt(0)){
case '+': operands.push('+');
break;
case '-': operands.push('-');
break;
case '/': operands.push('/');
break;
case '*': operands.push('*');
break;
case '%': operands.push('%');
break;
}
}
if(temp2.charAt(0) == '.')
break;
}

while(S.size > 1){
op = operands.pop();
num2 = S.pop();
num1 = S.pop();
switch(op){
case '+': S.push(num1 + num2);;
break;
case '-': S.push(num1 - num2);;
break;
case '/': S.push(num1 / num2);;
break;
case '*': S.push(num1 * num2);;
break;
case '%': S.push(num1 % num2);
break;
}
}
System.out.println("Your operation = " + S.pop());

System.out.print('\n'+"Do you want to perform another operation?");
System.out.print(" 1 for yes or 0 to quit: ");
ch = keyboard.nextInt();
}
}

最佳答案

您使用的算法有误!

例如,假设您给出:

% * 5 12 8

你的程序将输出5作为答案

它将 % 和 * 压入堆栈,将 5 12 和 8 压入堆栈

然后它会取出 8 和 12 并取出 * 并执行 8 * 12 = 96 并将其压入堆栈

现在在下一轮中它将取出 96 和 5 以及 % 作为运算符并执行 5 % 96 = 5 作为输出给出

在这里你需要考虑两件非常重要的事情:

  1. % 运算符与 * 和/(在 Java 中)具有相同的优先级。但是前缀表达式的计算方式与您的程序不同:

    % * 5 12 8 应计算为:

    (5 * 12) % 84

    所以更新你的算法。

  2. 您的算法不考虑运算符优先级。在您的程序中添加该功能!

    尝试一些示例 here

希望这对您有所帮助!

关于java - 为什么当我连续输入 2 个以上的整数时,我的前缀运算程序不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21463827/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com