java二元表达式

本文解析了一个Java二元表达式的运行逻辑。该表达式通过条件运算符判断1是否小于2,若成立则直接输出1;反之,则进一步判断3是否小于4。最终输出结果为1。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看一个java二元表达式

System.out.println(1<2?1:3<4?3:4);

当1<2的时候输出1否则看3是否<4,是的话输出3不是的话输出4
所以此题输出1


### Java 中后缀表达式的实现与用法 #### 处理正负数情况 为了处理中缀表达式中的正负数,在转换成后缀表达式之前,可以在加法和减法运算符前添加`0`。这一步骤能够确保所有的正负号都被视为二元操作符的一部分[^1]。 ```java private static String Positive_negative(String expression){ StringBuilder sb = new StringBuilder(); int index = 0; while(index < expression.length()){ char c = expression.charAt(index); if((c == '+' || c == '-') && (index == 0 || isOperator(expression.charAt(index-1)))){ sb.append('0'); } sb.append(c); ++index; } return sb.toString(); } ``` #### 转换为后缀表达式 将中缀表达式转化为后缀表达式的过程中,遵循特定的操作符优先级规则以及括号匹配逻辑。对于每一个读取到的字符或者子串: - 如果是数字,则直接加入输出队列; - 若遇左括号则推入栈中; - 遇到右括号时不断弹出栈内的元素直至遇见对应的左括号为止,并丢弃这对括号; - 当碰到其他算术符号时,比较当前符号同栈顶符号之间的优先级别决定是否应该先执行栈内已有的计算还是继续压栈等待后续处理; 最终得到的是一个由数值和操作码组成的线性序列——即所谓的逆波兰表示法(Postfix Notation)。 #### 计算后缀表达式 一旦获得了后缀形式的字符串之后就可以利用单个栈结构来进行求解了。遍历整个表达式列表: - 对于遇到的任何数字都立即放入栈里保存起来作为潜在的操作对象; - 只要发现了一个运算符就立刻取出最近两次被记住的数据完成相应类型的数学运算并将所得结果重新送回栈底位置准备参与下一轮可能存在的进一步加工活动; 当所有输入均已被解析完毕之时留在栈里的唯一一项便是所给定原始命题的答案所在之处[^3]。 ```java public class ExpressionEvaluator { private Stack<Integer> dataStack; public double calculate(List<String> postfixExpression) throws Exception{ this.dataStack = new Stack<>(); for (String token : postfixExpression) { try { Integer value = Integer.parseInt(token); // Try to parse as integer first. dataStack.push(value); } catch(NumberFormatException e){ // If not an operand, it must be operator. performOperation(token); } } return dataStack.pop(); // The final result should remain on the stack after all operations are done. } private void performOperation(String op) throws Exception{ if(dataStack.size() >= 2){ int b = dataStack.pop(), a = dataStack.pop(); switch(op){ case "+": dataStack.push(a+b); break; case "-": dataStack.push(a-b); break; case "*": dataStack.push(a*b); break; case "/": // Assuming division by zero has been handled elsewhere or will throw ArithmeticException naturally. dataStack.push(a/b); break; default: throw new IllegalArgumentException("Unsupported operation: " + op); } }else{ throw new IllegalStateException("Insufficient values in stack for performing operation."); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值