繁体   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