我有一个问题,我被困住了。我有一个菜单驱动的计算器。我的计算器类包含方法displayMenu();看起来像
public static int displayMenu(){
Scanner input=new Scanner(System.in);
int choice=0;
do{
System.out.println("1.Add");
System.out.println("2.Subtract");
System.out.println("3.Multiply");
System.out.println("4.Divide");
System.out.println("5.Clear");
System.out.println("6.Quit");
System.out.println("What would you like to do?");
}while(!input.hasNextInt());
choice=input.nextInt();
return choice;
}
我被要求创建一个名为ScientificMemCalc的子类。子类应该使用继承功能向菜单添加新选项。新的打印输出应该是
菜单 1.添加 2.减去 3.乘以 4.划分 5.力量 6.对数 7.清楚 8.退出
你想做什么?
我知道从
开始public class ScientificMemCalc extends MC{
}
但我不明白如何覆盖displayMenu()函数来显示新选项。我想如何为新选项添加功能,但是如何在不重写子类中的整个方法的情况下更改打印输出?
答案 0 :(得分:1)
尝试将显示的内容(即菜单项字符串列表)与实际显示它们的代码分开。
在您编写的代码中,菜单项字符串列表在您的显示代码中为hardcoded
,您可以将其视为对System.out.println
功能的调用。
System.out.println("1. ...");
System.out.println("2. ...");
除非通过修改调用System.out.println
的代码,否则无法将其他项添加到列表中。
您需要做的是将菜单项(字符串列表)存储在某些数据结构中(例如array
,list
或map
)。然后有一些显示代码从数据结构中读取项目并使用System.out.println()
显示它们。
你要创造:
存储菜单项字符串的数据结构。您有很多选择:arrays
,lists
,maps
读取您已创建的数据结构并将菜单项打印到屏幕的功能。
比较
System.out.println("1. menu item choice1");
使用:
String[] menuitems = new String[]{"1. menu item choice1", "2. menu item choice2"};
for(String item : menuitems) System.out.println(item);
现在您可以向菜单项数组添加内容,它们将自动打印在for循环中。
class MC {
protected String[] menuitems = new String[]{"1. menu item choice1", "2. menu item choice2"};
public void displayMenu() {
for(String item : menuitems) System.out.println(item);
}
}
现在,如果您继承MC,则可以更改菜单项。 displayMenu()
会显示您的更改。
您可能还想考虑:
最后一个实际上可能是存储菜单项的相同数据结构。实际上,您可能想要考虑如何映射菜单项字符串,用户的输入(int)以及正在调用的函数。