【发布时间】:2011-04-21 05:59:52
【问题描述】:
好的,让这个更清楚,这是我需要对我的整个程序做的事情。在向用户提供菜单之前,我需要 main 恢复文件“calc.bak”中的所有计算器,并且 main 应该在退出之前保存存在于同一文件中的所有计算器(酌情覆盖)。我还需要让用户选择创建一个全新的计算器,为其命名,并从现有的集合(即我的加、乘和除)中添加一个函数。我还需要用户通过设计和命名任意一对函数的组合来创建自己的函数。第一个函数的输出必须输入到第二个函数。例如,用户可以创建一个名为“addmult”的新函数,该函数调用 add 函数(提示输入两个数字并将它们相加)并将总和确定为乘法函数的操作数之一(它必须提示输入第二个操作数)。
输出的示例应如下所示: 欢迎使用计算器配置器
从文件中恢复计算器
从头开始创建一个计算器
让我创建一个你可以使用的计算器
2
好的。所以你想自己创建一个。
你的计算器叫什么名字?弗雷德
指明您希望将我们库存中的哪些功能添加到您的计算器中(输入 0 退出此菜单):
添加(1)
乘法(2)
除法(3)
函数对(4)
输入 (2)
指明您希望将我们库存中的哪些功能添加到您的计算器中(输入 0 退出此菜单):
添加
相乘
除法
函数对
1 指明您希望将我们库存中的哪些功能添加到您的计算器中(输入 0 退出此菜单): 添加
相乘
除法
函数对
4
为这对提供一个名称:
BothAddAndMult
提供这对的描述:
相乘再相加
首先应该使用哪个函数?
相乘(0)
添加(1)
0
首先应该使用哪个函数?
相乘
添加
1
指明您希望将我们库存中的哪些功能添加到您的计算器中(输入 0 退出此菜单):
添加
相乘
除法
函数对
4
为这对提供一个名称:
多次后
提供这对的描述:在乘法和加法之后最后相乘
首先应该使用哪个函数?
相乘
添加
BothAddAndMult
2
首先应该使用哪个函数?
相乘
添加
BothAddAndMult
指明您希望将我们库存中的哪些功能添加到您的计算器中(输入 0 退出此菜单):
添加
相乘
除法
函数对
0
我是一个叫弗雷德的计算器
退出
清除内存
两个数相乘
两个数字相加
先相乘再相加
在乘法和加法后最后乘法
有人可以帮我实现这个输出吗?
这是我目前的代码
CalcConfig.java
import java.util.Scanner;
// program to model a configurable calculator
public class CalcConfig {
public static void main(String [] args)
{
System.out.println("Welcome to the Calculator Configurator");
Scanner kbd = new Scanner(System.in);
CalcFunction [] funs = {
new Add(kbd, "add two numbers"),
new Multiply(kbd, "Multiply two numbers"),
new Divide(kbd, "divide two numbers")};
Calculator calc = new Calculator(funs);
calc.go(kbd);
}
}
计算器.java
//my Calculator class
import java.util.Scanner;
// models a configurable calcuator
public class Calculator {
private CalcFunction [] functions;
private double memory = 0;
private boolean clear = true;
public Calculator(CalcFunction [] functions)
{
this.functions = functions;
}
public void go(Scanner kbd)
{
int choice = 0;
do
{
System.out.println(this);
choice = kbd.nextInt();
if (choice == 0) return; // choice is to quit
if (choice == 1)
{
clear = true;
continue;
}
if (choice < 0 || choice >= 5)
{
System.out.println("error");
continue;
}
if (!clear)
{
System.out.print("use memory [" + memory + "] (y or n)? ");
String ans = kbd.next();
if (ans.equals("n")) clear = true;
}
if (clear)
memory = functions[choice-2].doit();
else
memory = functions[choice-2].doit(memory);
clear = false;
System.out.println(memory);
} while(choice != 0);
}
public String toString()
{
String out = "0. quit\n1. clear memory\n";
for (int i=0; i<functions.length; i++)
out += (i+2) + ". " + functions[i] + "\n";
return out;
}
}
CalcFunction.java
//my CalcFunction class
import java.util.Scanner;
// generic class to model a function in a calculator
public abstract class CalcFunction {
private Scanner kbd;
private String description;
public CalcFunction(Scanner kbd, String description)
{
this.kbd = kbd;
this.description = description;
}
public abstract double doit();
public abstract double doit(double memory);
// get a string from the user
protected String getString(String prompt)
{
System.out.print(prompt);
return kbd.next();
}
// get a number from the user
protected double getNum(String prompt)
{
System.out.print(prompt);
while(!kbd.hasNextDouble())
{
System.out.print("Invalid: need a number: ");
kbd.next(); // discard invalid input
}
return kbd.nextDouble();
}
public String toString()
{
return description;
}
}
添加.java
//just one of my functions(Add)
import java.util.Scanner;
// class to encapsulate adding two numbers
public class Add extends CalcFunction {
public Add(Scanner kbd, String description)
{
super(kbd, description);
}
public double doit()
{
double n1 = this.getNum("Enter a number: ");
return this.doit(n1);
}
public double doit(double first)
{
double n2 = this.getNum("Enter a second number: ");
double answer = first + n2;
return answer;
}
}
如果可以,请提供帮助。谢谢!
【问题讨论】:
-
请提供具有逻辑和一致形式的缩进和分隔代码块的代码。那个代码是一团糟!如果您可以将问题的代码减少到SSCCE,您还将获得更好的帮助机会。这将涉及将所有类放入同一个源文件中,只有带有
main(String[])的类声明为 public。 -
go() 和 doIt() 是糟糕的函数名。另外请修正你的缩进,让它更难阅读。
标签: java