📄 calculator.java
字号:
/**线性计算器
Simple line-oriented calculator program. The class
can also be used to create other calculator programs.
*/
public class Calculator
{
private double result;
private double memory;
private double precision = 0.0001;
//Numbers this close to zero are treated as if equal to zero.
public static void main(String[] args)
{
Calculator clerk = new Calculator( );
try
{
System.out.println("Calculator is on.");
System.out.print("Format of each line: ");
System.out.println("operator number");
System.out.println("For example: + 3");
System.out.println("To end, enter the letter e.");
System.out.println("To clear,enter the letter c.");
System.out.println("To save in memory,enter the letter m");
System.out.println("To recall the memory,enter the letter r");
clerk.doCalculation( );
}
catch(UnknownOpException e)
{
clerk.handleUnknownOpException(e);
}
catch(DivideByZeroException e)
{
clerk.handleDivideByZeroException(e);
}
System.out.println("The final result is "
+ clerk.resultValue( ));
System.out.println("Calculator program ending.");
}
public Calculator( )
{
result = 0;
}
public void reset( )
{
result = 0;
}
public void setResult(double newResult)
{
result = newResult;
}
public double resultValue( )
{
return result;
}public void saveInMemory(double d){
memory=d;
System.out.println("result saved in memory");
}public void recallMemory(){
System.out.println("memory recall\nmemory value ="+memory);
}public void clear(){
result=0;
System.out.println("result = "+result);
}
/**
The heart of a calculator. This does not give
instructions. Input errors throw exceptions.
*/
public void doCalculation( ) throws DivideByZeroException,
UnknownOpException
{
char nextOp;
double nextNumber;
boolean done = false;
result = 0;
System.out.println("result = " + result);
while (! done)
{
nextOp = SavitchIn.readNonwhiteChar( );
if ((nextOp == 'e') || (nextOp == 'E'))
done = true;
else if((nextOp == 'c') || (nextOp == 'C'))
clear();
else if((nextOp == 'm') || (nextOp == 'M'))
saveInMemory(result);
else if((nextOp == 'r') || (nextOp == 'R'))
recallMemory();
else
{
nextNumber = SavitchIn.readLineDouble( );
System.out.print(result);
result = evaluate(nextOp, result, nextNumber);
System.out.println(nextOp + " "
+ nextNumber + " = " + result);
System.out.println("updated result = " + result);
}
}
}
/**
Returns n1 op n2,
provided op is one of '+', '-', '*',or '/'.
Any other value of op throws UnknownOpException.
*/
public double evaluate(char op, double n1, double n2)
throws DivideByZeroException, UnknownOpException
{
double answer;
switch (op)
{
case '+':
answer = n1 + n2;
break;
case '-':
answer = n1 - n2;
break;
case '*':
answer = n1 * n2;
break;
case '/':
if ( Math.abs(n2)<precision)
throw new DivideByZeroException( );
answer = n1/n2;
break;
default:
throw new UnknownOpException(op);
}
return answer;
}
public void handleDivideByZeroException(DivideByZeroException e)
{
System.out.println("Dividing by zero.");
System.out.println("Program aborted");
System.exit(0);
}
public void handleUnknownOpException(UnknownOpException e)
{
System.out.println(e.getMessage( ));
System.out.println("Try again from the beginning:");
try
{
System.out.print("Format of each line: ");
System.out.println("operator number");
System.out.println("For example: +3");
System.out.println("To end, enter the letter e.");
System.out.println("To clear,enter the letter c.");
System.out.println("To save in memory,enter the letter m");
System.out.println("To recall the memory,enter the letter r");
doCalculation( );
}
catch(UnknownOpException e2)
{
System.out.println(e2.getMessage( ));
System.out.println("Try again at some other time.");
System.out.println("Program ending.");
System.exit(0);
}
catch(DivideByZeroException e3)
{
handleDivideByZeroException(e3);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -