簡體   English   中英

在 java 中制作基本計算器,輸入驗證方法有問題

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM