[英]Making basic calculator in java and having trouble with input validation methods
我在 Java 上学,我目前的任务是慢慢构建一个计算器。 老师在当前部分上传了错误的讲座,我找不到解决问题的方法。 所以我有处理输入并将输入传递给两个函数的主要方法。 一个验证输入了实数,第二个 function 验证数字是否由有效的运算符 (^ * / + -) 分隔。 我想出了数字验证,但我不知道如何验证字符串中的运算符。 在主 function 将输入更改为数组并继续之前,必须验证输入字符串。 到目前为止,这是我的代码
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
public class Calculator {
public static void main(String[] args) {
ArrayList<String> validOperators = new ArrayList<String>(){{
add("^");
add("*");
add("/");
add("+");
add("-");
}};
System.out.println("This is a text based calculator!");
Scanner in = new Scanner(System.in);
boolean loop = true;
while (loop) {
System.out.println("Enter a math expression ot type quit to exit: ");
String math = in.nextLine();
if ("quit".equalsIgnoreCase(math)) {
System.out.print("Quitting");
break;
}
if (isOperator(math)){
String[] splitExpression = math.split("\\s+");
if (isNumber(splitExpression)){
for (int i=0; i<splitExpression.length; i++){
System.out.println(splitExpression[i]);
}
System.out.println("Number of tokens: " + splitExpression.length);
}else {
System.out.println("invalid expression!");
}
}else{
System.out.println("please use valid operators");
}
}
}
public static boolean isNumber(String[] number){
try {
double test = Double.parseDouble(number[0]);
double test2 = Double.parseDouble(number[2]);
} catch (Exception e){
return false;
}
return true;
}
public static boolean isOperator(String operator){
if (operator.contains("^")){
return true;
}else{
return false;
}
}
public static boolean isValidExpression(String[] strArray){
String strOfArray = Arrays.toString(strArray);
return;
}
}
isOperator()
正在检查指数运算符,您可能需要检查addition(+), substration(-), multiplication(*),division(/) and modulo(%)
是运算符
public static boolean isAnOperator(char c) {
switch (c) {
case '*':
case '/':
case '+':
case '-':
case '%':
return true;
default:
return false;
}
}
更新 isANumber 以检查给定的字符串字符是否为数字
public static boolean isANumber(char c){
return ((int)c) >= 48 && ((int)c) <= 57;
}
isValidExpression()
public static boolean isValidExpression(String expression) {
if (isAnOperator(expression.charAt(0)) || isAnOperator(expression.charAt(expression.length() - 1))) {
return false;
}
int openParenthCount = 0;
boolean lastWasOp = false;
boolean lastWasOpen = false;
for (char c : expression.toCharArray()) {
if(c == ' ') continue;
if (c == '(') {
openParenthCount++;
lastWasOpen = true;
continue;
} else if (c == ')') {
if (openParenthCount <= 0 || lastWasOp) {
return false;
}
openParenthCount--;
}else if (isAnOperator(c)){
if (lastWasOp || lastWasOpen) return false;
lastWasOp = true;
continue;
}else if(!isANumber(c)){
return false;
}
lastWasOp = false;
lastWasOpen = false;
}
if(openParenthCount != 0) return false;
if(lastWasOp || lastWasOpen) return false;
return true;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.