有人能改进我用Java编写的应用程序吗?
我对案例5最不满意,因为它包含太多代码,并且允许重复。我听说过集合,但在这个例子中可以看到它是如何工作的 以下是我的完整源代码:有人能改进我用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
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(){
返回名称;
}
}
您可以通过将两个类中的一个声明为前导类来减少代码重复,比如模块和您调用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;
}