有人能改进我用Java编写的应用程序吗?

有人能改进我用Java编写的应用程序吗?,java,collections,Java,Collections,我对案例5最不满意,因为它包含太多代码,并且允许重复。我听说过集合,但在这个例子中可以看到它是如何工作的 以下是我的完整源代码: public class MyApplication { public static void main(String[] args) { Control control = new Control(); control.run(); } } 驾驶员/控制类 import java.util.Scanner; public class Cont

我对案例5最不满意,因为它包含太多代码,并且允许重复。我听说过集合,但在这个例子中可以看到它是如何工作的

以下是我的完整源代码:

public class MyApplication {

public static void main(String[] args) {
    Control control = new Control();
    control.run();
}
}

驾驶员/控制类

import java.util.Scanner;


public class Control {

// Integers represented as module codes 
private static final int UFCE1 = 0;
private static final int UFCE2 = 1;
private static final int UFCE3 = 2;
private static final int UFCE4 = 3;
private static final int UFCE5 = 4;
// Integers represented as students
private static final int STUDENT1 = 0;
private static final int STUDENT2 = 1;
private static final int STUDENT3 = 2;
private static final int STUDENT4 = 3;
private static final int STUDENT5 = 4;

public void run() {

   ...

    while (true) {
        Menu menu = new Menu();
        menu.getMainMenu();

        try {
            Scanner scan = new Scanner(System.in);

            int selection = scan.nextInt();
            switch (selection) {
                case 1:
                    for (Student student : students) {
                        System.out.print(student.getName() + " ");
                    }
                    break;
                case 2:
                    for (Module module : modules) {
                        System.out.print(module.getName() + " ");
                    }
                    break;
                case 3:
                    System.out.println("Search module code: ");
                    scan = new Scanner(System.in);
                    String searchModule = scan.nextLine().trim();

                    for (Module module : modules) {
                        if (searchModule.equalsIgnoreCase(module.getName())) {
                            for (int s = 0; s < module.getStudents().size(); s++) {
                                System.out.print(module.getStudents().get(s) + " ");
                            }
                        }
                    }
                    break;
                case 4:
                    System.out.println("Search students : ");
                    scan = new Scanner(System.in);
                    String searchStudent = scan.nextLine().trim();

                    for (Student student : students) {
                        if (searchStudent.equalsIgnoreCase(student.getName())) {
                            for (int s = 0; s < student.getModules().size(); s++) {
                                System.out.print(student.getModules().get(s) + " ");
                            }
                        }
                    }
                    break;
                case 5:
                    // Print out students 
                    System.out.println("select a student: ");
                    for (int i = 0; i < students.length; i++) {
                        System.out.println(i + " " + students[i]);
                    }

                    selection = scan.nextInt();
                    switch (selection) {

                        case STUDENT1:
                            System.out.println("select a module to enroll " + students[0].getName() + " on to:");
                            for (int i = 0; i < modules.length; i++) {
                                System.out.println(i + " " + modules[i]);
                            }

                            selection = scan.nextInt();
                            switch (selection) {
                                case UFCE1:
                                    System.out.println("You have enrolled " + students[0].getName() + " on to " + modules[0].getName());
                                    students[0].addModule(modules[0].getName());
                                    modules[0].addStudent(students[0].getName());
                                    break;
                                case UFCE2:
                                    System.out.println("You have enrolled " + students[0].getName() + " on to " + modules[1].getName());
                                    students[0].addModule(modules[1].getName());
                                    modules[1].addStudent(students[0].getName());
                                    break;
                                case UFCE3:
                                    System.out.println("You have enrolled " + students[0].getName() + " on to " + modules[2].getName());
                                    students[0].addModule(modules[2].getName());
                                    modules[2].addStudent(students[0].getName());
                                    break;
                                case UFCE4:
                                    System.out.println("You have enrolled " + students[0].getName() + " on to " + modules[3].getName());
                                    students[0].addModule(modules[3].getName());
                                    modules[3].addStudent(students[0].getName());
                                    break;
                                case UFCE5:
                                    System.out.println("You have enrolled " + students[0].getName() + " on to " + modules[4].getName());
                                    students[0].addModule(modules[4].getName());
                                    modules[4].addStudent(students[0].getName());
                                    break;
                                default:
                                    System.out.println("Invalid subject selected. Returning to main menu...");
                            }
                            break;

                        case STUDENT2:
                            System.out.println("select a module to enroll " + students[1].getName() + " on to:");
                            for (int i = 0; i < modules.length; i++) {
                                System.out.println(i + " " + modules[i]);
                            }

                            selection = scan.nextInt();
                            switch (selection) {
                                case UFCE1:
                                    System.out.println("You have enrolled " + students[1].getName() + " on to " + modules[0].getName());
                                    students[1].addModule(modules[0].getName());
                                    modules[0].addStudent(students[1].getName());
                                    break;
                                case UFCE2:
                                    System.out.println("You have enrolled " + students[1].getName() + " on to " + modules[1].getName());
                                    students[1].addModule(modules[1].getName());
                                    modules[1].addStudent(students[1].getName());
                                    break;
                                case UFCE3:
                                    System.out.println("You have enrolled " + students[1].getName() + " on to " + modules[2].getName());
                                    students[1].addModule(modules[2].getName());
                                    modules[2].addStudent(students[1].getName());
                                    break;
                                case UFCE4:
                                    System.out.println("You have enrolled " + students[1].getName() + " on to " + modules[3].getName());
                                    students[1].addModule(modules[3].getName());
                                    modules[3].addStudent(students[1].getName());
                                    break;
                                case UFCE5:
                                    System.out.println("You have enrolled " + students[1].getName() + " on to " + modules[4].getName());
                                    students[1].addModule(modules[4].getName());
                                    modules[4].addStudent(students[1].getName());
                                    break;
                                default:
                                    System.out.println("Invalid subject selected. Returning to main menu...");
                            }
                            break;

                        case STUDENT3:
                            System.out.println("select a module to enroll " + students[2].getName() + " on to:");
                            for (int i = 0; i < modules.length; i++) {
                                System.out.println(i + " " + modules[i]);
                            }

                            selection = scan.nextInt();
                            switch (selection) {
                                case UFCE1:
                                    System.out.println("You have enrolled " + students[2].getName() + " on to " + modules[0].getName());
                                    students[2].addModule(modules[0].getName());
                                    modules[0].addStudent(students[2].getName());
                                    break;
                                case UFCE2:
                                    System.out.println("You have enrolled " + students[2].getName() + " on to " + modules[1].getName());
                                    students[2].addModule(modules[1].getName());
                                    modules[1].addStudent(students[2].getName());
                                    break;
                                case UFCE3:
                                    System.out.println("You have enrolled " + students[2].getName() + " on to " + modules[2].getName());
                                    students[2].addModule(modules[2].getName());
                                    modules[2].addStudent(students[2].getName());
                                    break;
                                case UFCE4:
                                    System.out.println("You have enrolled " + students[2].getName() + " on to " + modules[3].getName());
                                    students[2].addModule(modules[3].getName());
                                    modules[3].addStudent(students[2].getName());
                                    break;
                                case UFCE5:
                                    System.out.println("You have enrolled " + students[2].getName() + " on to " + modules[4].getName());
                                    students[2].addModule(modules[4].getName());
                                    modules[4].addStudent(students[2].getName());
                                    break;
                                default:
                                    System.out.println("Invalid subject selected. Returning to main menu...");
                            }
                            break;
                        case STUDENT4:
                            System.out.println("select a module to enroll " + students[3].getName() + " on to:");
                            for (int i = 0; i < modules.length; i++) {
                                System.out.println(i + " " + modules[i]);
                            }

                            selection = scan.nextInt();
                            switch (selection) {
                                case UFCE1:
                                    System.out.println("You have enrolled " + students[3].getName() + " on to " + modules[0].getName());
                                    students[3].addModule(modules[0].getName());
                                    modules[0].addStudent(students[3].getName());
                                    break;
                                case UFCE2:
                                    System.out.println("You have enrolled " + students[3].getName() + " on to " + modules[1].getName());
                                    students[3].addModule(modules[1].getName());
                                    modules[1].addStudent(students[3].getName());
                                    break;
                                case UFCE3:
                                    System.out.println("You have enrolled " + students[3].getName() + " on to " + modules[2].getName());
                                    students[3].addModule(modules[2].getName());
                                    modules[2].addStudent(students[3].getName());
                                    break;
                                case UFCE4:
                                    System.out.println("You have enrolled " + students[3].getName() + " on to " + modules[3].getName());
                                    students[3].addModule(modules[3].getName());
                                    modules[3].addStudent(students[3].getName());
                                    break;
                                case UFCE5:
                                    System.out.println("You have enrolled " + students[3].getName() + " on to " + modules[4].getName());
                                    students[3].addModule(modules[4].getName());
                                    modules[4].addStudent(students[3].getName());
                                    break;
                                default:
                                    System.out.println("Invalid subject selected. Returning to main menu...");
                            }
                            break;
                        case STUDENT5:
                            System.out.println("select a module to enroll " + students[4].getName() + " on to:");
                            for (int i = 0; i < modules.length; i++) {
                                System.out.println(i + " " + modules[i]);
                            }

                            selection = scan.nextInt();
                            switch (selection) {
                                case UFCE1:
                                    System.out.println("You have enrolled " + students[4].getName() + " on to " + modules[0].getName());
                                    students[4].addModule(modules[0].getName());
                                    modules[0].addStudent(students[4].getName());
                                    break;
                                case UFCE2:
                                    System.out.println("You have enrolled " + students[4].getName() + " on to " + modules[1].getName());
                                    students[4].addModule(modules[1].getName());
                                    modules[1].addStudent(students[4].getName());
                                    break;
                                case UFCE3:
                                    System.out.println("You have enrolled " + students[4].getName() + " on to " + modules[2].getName());
                                    students[4].addModule(modules[2].getName());
                                    modules[2].addStudent(students[4].getName());
                                    break;
                                case UFCE4:
                                    System.out.println("You have enrolled " + students[4].getName() + " on to " + modules[3].getName());
                                    students[4].addModule(modules[3].getName());
                                    modules[3].addStudent(students[4].getName());
                                    break;
                                case UFCE5:
                                    System.out.println("You have enrolled " + students[4].getName() + " on to " + modules[4].getName());
                                    students[4].addModule(modules[4].getName());
                                    modules[4].addStudent(students[4].getName());
                                    break;
                                default:
                                    System.out.println("Invalid subject selected. Returning to main menu...");
                            }
                            break;
                        default:
                            System.out.println("Invalid student selected. Returning to main menu...");
                    }
                    break;
                case 6:
                    System.out.println("Goodbye!");
                    System.exit(0);
                    break;
                default:
                    System.out.println("Invalid option selected. You must enter a number between 1 & 6!");
            } // end switch

        } catch (Exception e) {
            System.out.println("Invalid entry. You must enter a number between 1 & 6");
        }
    } // end while

}
}

模块类

import java.util.ArrayList;


public class Module {
private String name;
private ArrayList<String> students;

public Module(String name) {
    this.name = name;
    students = new ArrayList<String>();
}

public String getName() {
    return name;
}

public ArrayList<String> getStudents() {
    return students;
}

public void addStudent(String student){
    students.add(student);
}

@Override
public String toString() {
    return name; 
}
import java.util.ArrayList;
公共类模块{
私有字符串名称;
私立ArrayList学生;
公共模块(字符串名称){
this.name=名称;
学生=新数组列表();
}
公共字符串getName(){
返回名称;
}
公共阵列列表getStudents(){
留学生;
}
公共学生(字符串学生){
学生。添加(学生);
}
@凌驾
公共字符串toString(){
返回名称;
}
}

学生班

import java.util.ArrayList;

public class Student {
private String name;
private ArrayList<String> modules;

public Student(String name) {
    this.name = name;
    modules = new ArrayList<String>();
}

public String getName() {
    return name;
}

public ArrayList<String> getModules() {
    return modules;
}

public void addModule(String module){
    modules.add(module);
}

@Override
public String toString() {
    return name;
}
import java.util.ArrayList;
公立班学生{
私有字符串名称;
私有ArrayList模块;
公立学生(字符串名称){
this.name=名称;
modules=newarraylist();
}
公共字符串getName(){
返回名称;
}
公共ArrayList getModules(){
返回模块;
}
公共空添加模块(字符串模块){
模块。添加(模块);
}
@凌驾
公共字符串toString(){
返回名称;
}
}

  • 用枚举替换整数
  • 将每个开关块提取到单独的命名良好的方法
  • 将每个案例块提取到单独的方法中
  • 然后带着你所有的回来

    在案例5中,设置模块和学生之间的相互引用。
    您可以通过将两个类中的一个声明为前导类来减少代码重复,比如模块和您调用addModule的addStudent方法内部(this)

    可能应该移动到您有具体问题吗?我怀疑很多人会看完所有这些。请看。@Jens使用枚举而不是整数是如何改进的?我不确定为switch语句创建类是否会减少代码量,但我同意它会变得更可读。我想知道是否可以完全删除switch语句?基本上,案例5允许用户将学生连接到模块上。有更简单的方法吗?我还将看看上面建议的代码审查。@rana整数用于计算东西。但在这里,它们只是用于枚举。我直接表达了那个意图
    import java.util.ArrayList;
    
    public class Student {
    private String name;
    private ArrayList<String> modules;
    
    public Student(String name) {
        this.name = name;
        modules = new ArrayList<String>();
    }
    
    public String getName() {
        return name;
    }
    
    public ArrayList<String> getModules() {
        return modules;
    }
    
    public void addModule(String module){
        modules.add(module);
    }
    
    @Override
    public String toString() {
        return name;
    }