【问题标题】:Making a simple calculator: cannot exit loop or give answer制作一个简单的计算器:无法退出循环或给出答案
【发布时间】:2011-03-22 19:40:47
【问题描述】:

我需要做一个简单的计算器。我无法输入任意数量的运算符和操作数,然后在输入等于按钮时输出答案。

到目前为止,如果我只按一个数字和一个数字,它就会退出但不给我答案。如果我执行多个运算符和操作数,那么= 它不会退出循环。 例如它应该是这样的:

5
+
5
+
5
=
15 

这是我的代码,计算器:

public interface Calculator {
    public void setOperator(char operator);         // eg +-*/=
    public void setOperand (double operand);        // eg 123.456
    public double getResult();
}

简单计算器:

import java.io.*;

public class SimpleCalculator implements Calculator {
    char operator;
    double operand;
    double result;
    double answer;

    public void setOperator(char operator){
        this.operator = operator;
    }

    public char getOperator(){
        return operator;
    }

    public void setOperand(double operand){
        this.operand = operand;
    }
    public double getOperand(){
        return operand;
    }

    public double getResult(){
        if (getOperator() == '+'){
            result = (getOperand() + getOperand());
        }
        if (getOperator() == '-'){
            result = (getOperand() - getOperand());
        }
        if (getOperator() == '*'){
            result = (getOperand() * getOperand());
        }
        if (getOperator() == '/')
        {
            result = (getOperand() / getOperand());
        }
        if (getOperator() == '=')
            result =  answer;
    }

    return result;
}

public boolean getanswer(String value)
{
    boolean isnum = false;
    try {
        setOperand(Double.parseDouble(value));
        operand = (Double.parseDouble(value));
        getResult();
        isnum =  true;

    }
    catch(Exception e)
    {
        try {
            setOperator(value.charAt(0));
            operator = (value.charAt(0));
            isnum = false;
        }
        catch(Exception e2)
        {

            {
                System.out.println("Enter a number");
            }
        }
        return isnum;
    }
}

简单测试:

import java.io.*;

public class SimpleTest{
    static String value;
    static double operand;
    static char operator;
    static  boolean isnum;

    public static void main(String[] argv){
        SimpleCalculator calculator = new SimpleCalculator();
        value = UserInput.readString();
        while (!(value.equals("=")))
        {
            isnum = calculator.getanswer(value);
            if (!(isnum == true))
            {
                break;
            }
        }
        System.out.println(calculator.getResult());
    }

}

【问题讨论】:

  • 请更具体地说明您遇到的问题。您希望我们为您修复程序吗?
  • 很抱歉,您的代码设计得不好。都是你自己写的吗?继续努力,毕竟这是功课。

标签: java


【解决方案1】:

根据您的问题标题,我发现您的主循环可能存在问题:

value = UserInput.readString();
while (!(value.equals("="))) {
    isnum = calculator.getanswer(value);
    if (!(isnum == true)) {
        break;
    }
}

由于您在循环之外读取用户输入,因此它永远不会改变,并且只会运行一次(如果 isnum 为假)或无限期(如果 isnum 为真)——getanswer 没有关于其结果的记忆.因此,如果您输入一个数字,它将永远循环,但不会做任何有用的事情。

请注意:这只是初步猜测。我没有检查你程序的其余部分。

【讨论】:

    【解决方案2】:

    你并没有真正说出你的问题是什么,但我为你找到了一个:

    你正在使用

     result = (getOperand() + getOperand();
    

    (和类似的)来计算你的结果。但是getOperand() 总是返回相同的结果(因为你不能在这些调用之间执行setOperand()),所以你总是加、减、乘和除相同的数字。

    【讨论】:

    • 我将如何改变这个??
    • 你必须记住当前和之前的操作数,然后对两者都有 getter 方法。
    猜你喜欢
    • 2013-11-10
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    相关资源
    最近更新 更多