【发布时间】:2018-04-12 11:07:45
【问题描述】:
我正在尝试学习 Java,并且正在研究我的项目“程序集合”// 非常简单的项目:例如基本计算器、阶乘、反转数字等。 这些程序分为数学,绘图等类别...... 问题是,也许将来我会想要更多的类别/程序。 我想使用数组,所以每次添加新程序/类别时都不必重新编写代码。
我创建了一个字符串数组并更新了我的方法welcomeUser。 但我不知道如何处理我的 chooseBlock 方法和切换。 我想在我的数组中包含与块一样多的案例。
非常感谢您的每一个帮助
public class Program {
Scanner scan = new Scanner(System.in);
private boolean programRunning = true;
public void run() {
System.out.println("Welcome in my program! (version 1.0.0)");
while (programRunning) {
welcomeUser();
chooseBlock();
}
}
public void welcomeUser() {
System.out.println("You can choose from these blocks:\n"
+ "[1.Mathematic Block]\t"
+ "[2.Drawing block]\t"
+ "[3.Else...]\t"
+ "[4.Exit]\n"
+ "Select with a number and press ENTER");
}
public void chooseBlock() {
int block = 0;
block = scan.nextInt();
switch (block) {
case 1:
System.out.println("You've choosen Mathematic Block");
Mathematics maths= new Mathematics();
maths.run();
break;
case 2:
System.out.println("You've choosen Drawing block");
Drawings drawings = new Drawings();
drawings.run();
break;
case 3:
System.out.println("You've choosen Else block");
break;
case 4:
System.out.println("Exiting the program");
programRunning = false;
break;
default:
System.out.println("Invalid input. Try again.");
break;
}
System.out.println("");
}
}
private String[] blocks
= {"Mathematic Block", "Drawing Block", "Else", "Exit"};
public void welcomeUser() {
System.out.println("You can choose from these blocks:\n");
for (int i = 0; i < blocks.length; i++) {
System.out.print("[" + (i + 1) + ". " + blocks[i] + " ]\t");
if ((i + 1) % 4 == 0) {
System.out.println();
}
}
System.out.println();
System.out.println("Select with a number and press ENTER");
}
【问题讨论】:
-
您的问题是设计问题。 IE。如何使这个应用程序易于扩展。这是一个难题,通常不适合初学者。而且,对于这类问题,有不止一个好的答案。我建议使您的代码尽可能简单。这使以后的事情变得容易。当您现在不需要它们时,无需使用
Arrays。 当您想添加另一个类别时,您可以提出关于那个的问题。 -
简短的回答,你想使用类似策略模式的东西。每个类别都有自己的战略实施。当您需要添加新类别时,您需要实施新策略。知道,而不是
switch,您只需获取存储在数组中的Strategy的实例,索引将匹配类别数组。简单而进化。但是第一次实施需要时间,因为您需要有一个明确定义的策略。策略或状态模式是两个相似的,我可能会将它们混合在一起......
标签: java arrays switch-statement