Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java如何在开关方法中使用数组_Java_Arrays_Switch Statement - Fatal编程技术网

Java如何在开关方法中使用数组

Java如何在开关方法中使用数组,java,arrays,switch-statement,Java,Arrays,Switch Statement,我正在努力学习Java,正在编写我的项目集合//非常简单的程序:如基本计算器、阶乘、倒数等。 这些课程分为数学、绘画等类别。。。 问题是,也许将来我会想要更多的类别/项目。 我希望使用数组,这样就不必每次添加新程序/类别时都重新编写代码 我已经创建了一个字符串数组并更新了我的方法welcomeUser。 但是我不知道如何处理我的chooseBlock方法和开关。 我希望阵列中有尽可能多的案例 非常感谢你的帮助 基本上,您需要易于扩展的类别。实现这一点的方法有很多。我将为初学者草拟一种方法 首先,

我正在努力学习Java,正在编写我的项目集合//非常简单的程序:如基本计算器、阶乘、倒数等。 这些课程分为数学、绘画等类别。。。 问题是,也许将来我会想要更多的类别/项目。 我希望使用数组,这样就不必每次添加新程序/类别时都重新编写代码

我已经创建了一个字符串数组并更新了我的方法welcomeUser。 但是我不知道如何处理我的chooseBlock方法和开关。 我希望阵列中有尽可能多的案例

非常感谢你的帮助


基本上,您需要易于扩展的类别。实现这一点的方法有很多。我将为初学者草拟一种方法

首先,我将在一个类(如Category)中显式地建模类别:

每个特定类别都有自己的类,扩展类别

然后,您将获得可用类别的列表:

private List<Category> categories = Arrays.asList(new Mathematics(), ...);
现在,您可以按如下方式显示可用类别的列表:

public void welcomeUser() {
    System.out.println("You can choose from these blocks:");
    for (int index = 0; index < categories.size(); index++) { 
        Category category = categories.get(index);
        System.out.println("[" + (index+1) + "." + category.getTitle() + "]");
    }
    // ...
}
您可以执行以下操作,而不是切换:

int block = scan.nextInt();
int selectedCategoryIndex = block - 1;
if (selectedCategoryIndex >= 0 && selectedCategoryIndex < categories.size()) {
    Category selectedCategory = categories.get(selectedCategoryIndex);
    selectedCategory.run();
}

如果有新类别,只需将其添加到类别中。

您的问题是设计问题。即如何使此应用程序易于扩展。这是一个困难的问题,通常对初学者来说不是。此外,对于这类问题,有不止一个好的答案。我建议你的代码尽量简单。这样以后事情就容易了。当您现在不需要阵列时,无需使用它们。当你想添加另一个类别时,你可以问一个关于这个的问题。简单的回答是,你想使用一些类似策略模式的东西。每个类别都有自己的战略实施。当您需要添加一个新类别时,您需要实施一个新策略。要知道,您不需要切换,只需要获取存储在数组中的策略实例,索引将匹配category数组。简单的和进化的。但是第一次实现需要时间,因为您需要有一个定义良好的策略。战略或状态模式是两种相似的模式,我可能会将它们混合在一起……谢谢大家。我要试试。@user9635657如果你觉得我的答案对你有帮助,你可以。
public class Mathematics extends Category {
    public String getTitle() { return "Mathematic Block";}
    public void run() { ... }
}
private List<Category> categories = Arrays.asList(new Mathematics(), ...);
public void welcomeUser() {
    System.out.println("You can choose from these blocks:");
    for (int index = 0; index < categories.size(); index++) { 
        Category category = categories.get(index);
        System.out.println("[" + (index+1) + "." + category.getTitle() + "]");
    }
    // ...
}
int block = scan.nextInt();
int selectedCategoryIndex = block - 1;
if (selectedCategoryIndex >= 0 && selectedCategoryIndex < categories.size()) {
    Category selectedCategory = categories.get(selectedCategoryIndex);
    selectedCategory.run();
}