我有一个家庭作业,我应该用这种格式的字符串读取[1 + 2/3 + 4]然后我必须存储5个变量,这是前3个数字和前2个运算符。我的问题是我如何循环字符串并将值存储到不同的变量中。这是我到目前为止所做的。
public class ExpresionEvaluation {
static String expression;
static double o1;
static double o2;
private static double o3;
static char operator1;
private static char operator2;
public static String getOperand(String s) {
s = s.trim();
String num = "";
while (s.length() > 0 && s.charAt(0) >= '0' && s.charAt(0) <= '9') {
num = num + s.charAt(0);
s = s.substring(1);
}
expression = s;
return (num);
}
public static char getOperator(String s) {
s = s.trim();
char r = 0;
int i = 0;
while (s.length() > 0 && s.charAt(0) >= '0' && s.charAt(0) <= '9') {
r = s.charAt(i);
s = s.substring(i+1);
i++;
}
return (r);
}
public static double add(double a, double b) {
return (a + b);
}
public static double sub(double a, double b) {
return (a - b);
}
public static double mult(double a, double b) {
return (a * b);
}
public static double div(double a, double b) {
return (a / b);
}
public static double solveExpresion(String e) {
double answer = 0;
for(int i = 0;i< e.length();i++){
String operand1;
String operand2;
operand1 = getOperand(e);
o1 = Double.parseDouble(operand1);
operand2 = getOperand(expression);
o2 = Double.parseDouble(operand2);
operator1 = getOperator(expression);
}
return (answer);
}
}
这是我的主要课程
import java.util.Scanner;
public class TestCalc {
public static void main(String args[]) {
Scanner kb = new Scanner(System.in);
String equation;
System.out.println("Please enter your equation: ");
equation = kb.nextLine();
double newNum = ExpresionEvaluation.solveExpresion(equation);
//System.out.println(newNum);
System.out.println(ExpresionEvaluation.o1);
System.out.println(ExpresionEvaluation.operator1);
System.out.println(ExpresionEvaluation.o2);
//System.out.println(ExpresionEvaluation.expression);
}
}
每次我跑这个它说我有一个空字符串。
答案 0 :(得分:0)
以下是使用Matcher
/ Pattern
按预期检索5个变量的快速解决方案:
public static void main(String[] args) throws ParseException {
String operation = getOperationFromInput();
List<Integer> firstThreeNumbers = retrieveFirstThreeNumbers(operation);
List<Character> firstTwoOperators = retrieveFirstTwoOperators(operation);
printNumbersAndOperators(firstThreeNumbers, firstTwoOperators);
}
private static String getOperationFromInput() {
Scanner scanner = new Scanner(System.in);
scanner.useDelimiter("\n");
return scanner.next();
}
private static List<Integer> retrieveFirstThreeNumbers(String operation) {
List<Integer> firstThreeNumbers = new ArrayList<>();
Pattern patternNumber = Pattern.compile("\\d");
Matcher matcher = patternNumber.matcher(operation);
for (int i = 0; i < 3 && matcher.find(); i++) {
firstThreeNumbers.add(Integer.valueOf(matcher.group()));
}
return firstThreeNumbers;
}
private static List<Character> retrieveFirstTwoOperators(String operation) {
List<Character> firstTwoOperators = new ArrayList<>();
Pattern patternOperator = Pattern.compile("[+-/*]");
Matcher matcher = patternOperator.matcher(operation);
for (int i = 0; i < 2 && matcher.find(); i++) {
firstTwoOperators.add(matcher.group().charAt(0));
}
return firstTwoOperators;
}
private static void printNumbersAndOperators(List<Integer> firstThreeNumbers, List<Character> firstTwoOperators) {
System.out.println(firstThreeNumbers + " " + firstTwoOperators);
}
在此代码中,我将前三个数字存储在List<Integer>
中,将前两个运算符存储在List<Character>
中。
有多种方法可以实现解决方案,所以作为家庭作业,尝试寻找其他方法:)