[英]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.