java - 如何使用连续的用户输入更新输出,直到以“。”终止?
问题描述
Java 新手,并试图弄清楚如何保持用户给出的正在运行的评估表达式持续不断,直到他们输入“。” 终止它,然后打印输出。我需要使用我已经放置的主要方法之外的方法。我不必担心操作顺序,但我对如何在跟踪其输出的同时进行连续数量的操作/数字感到困惑那么当他们放“。”时如何最终打印结果。
import java.util.Scanner;
public class Evaluator {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int num1;
char expression;
int num2;
String numlist = "";
System.out.println("Enter the expression: ");
num1 = scan.nextInt();
expression = scan.next().charAt(0);
num2 = scan.nextInt();
scan.close();
if (expression == '+') {
add(num1, num2);
} else if (expression == '-') {
subtract(num1, num2);
} else if (expression == '*') {
multiply(num1, num2);
} else if (expression == '/') {
divide(num1, num2);
} else if (expression == '%') {
modulus(num1, num2);
} else if (expression == '.'){
}
}
static int add(int num1, int num2) {
return (num1 + num2);
}
static int subtract(int num1, int num2) {
return (num1 - num2);
}
static int divide(int num1, int num2) {
return (num1/num2);
}
static int multiply(int num1, int num2) {
return (num1*num2);
}
static int modulus(int num1, int num2) {
return (num1%num2);
}
}
输出:
输入表达式:
1
+
26
*
2
%
19
/
5
.
结果是 3
解决方案
我建议以“0 +”开头,然后是用户输入的任何内容。因为那时您不需要对第一个数字进行特殊处理。
import java.util.Scanner;
class Main
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.println("Enter the expression: ");
// Start with "0 +"
int value = 0;
String operator = "+";
while (true) // loop
{
int operand = scan.nextInt();
switch (operator)
{
case "+": value += operand; break;
case "-": value -= operand; break;
case "*": value *= operand; break;
case "/": value /= operand; break;
case "%": value %= operand; break;
default: throw new UnsupportedOperationException(operator);
}
operator = scan.next();
if (".".equals(operator))
{
break; // exit the loop
}
}
System.out.println("result=" + value);
scan.close();
}
}
但是,该算法不关心运算符顺序的数学规则。它只是像一个便宜的 3 欧元袖珍计算器一样从左到右处理输入。
基于您的 if-else 构造和方法的其他示例:
import java.util.Scanner;
class Main
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.println("Enter the expression: ");
// Start with "0 +"
int value = 0;
char operator = '+';
while (true) // loop
{
int operand = scan.nextInt();
if (operator == '+') {
value=add(value, operand);
} else if (operator == '-') {
value=subtract(value, operand);
} else if (operator == '*') {
value=multiply(value, operand);
} else if (operator == '/') {
value=divide(value, operand);
} else if (operator == '%') {
value=modulus(value, operand);
} else {
throw new UnsupportedOperationException(String.valueOf(operator));
}
operator = scan.next().charAt(0);
if (operator=='.')
{
break; // exit the loop
}
}
System.out.println("result=" + value);
scan.close();
}
static int add(int num1, int num2) {
return (num1 + num2);
}
static int subtract(int num1, int num2) {
return (num1 - num2);
}
static int divide(int num1, int num2) {
return (num1/num2);
}
static int multiply(int num1, int num2) {
return (num1*num2);
}
static int modulus(int num1, int num2) {
return (num1%num2);
}
}
推荐阅读
- swift - InterfaceController 如何访问 ViewController 中创建的对象?
- android - 为什么不能将 FragmentActivity 转换为 androidx.fragment.app.FragmentActivity
- hadoop - NameNode 地址的 URI 无效,s3a 不是模式“hdfs”
- codenameone - 代号 一台服务器拒绝超过 20 000kb 的构建
- javascript - 根据两个先前选择的下拉选项填充第三个下拉列表
- reactjs - 完整的日历 Prev - React 中的 Next 按钮
- javascript - react-native 错误中的自定义后退按钮:params.handleThis 不是函数(在 params.handleThis() 中,params.handleThis 未定义)
- c# - 无法将 foreach 转换为 linq select
- php - 我想用 php 更新值 json
- ruby - 如何遍历文件夹中的文件并将它们编码为base64以存储在ruby中的数组中?