【发布时间】:2020-12-30 22:45:09
【问题描述】:
上学期我有一个面向对象的编程项目,就是模拟一个简单的宿舍。
1. 应该有一个管理器类,其中主要方法和其他 80% 的方法必须存在。 2.一个宿舍类,包含一个数组列表。 3.包含房间数组列表的块类。 4.一个包含学生数组列表的房间类。 5.所有这些类都包含用于其私有变量的 getter 和 setter。
有一些我们应该添加到程序中的方法与我的问题无关,所以我不会在这里写它们,但问题是,其中一些方法需要查看这些arraylists 来查找特定对象。例如,具有特定学号的学生。我使用嵌套循环创建了这些方法。但我知道有一些方法可以避免大量嵌套。
这是我的简化代码。我将只让管理器类包含一个嵌套循环方法作为示例:
import java.util.Scanner;
public class Manager {
private String name;
private String familyName;
private String userName;
private String passWord;
private static Scanner scan = new Scanner(System.in);
private Dormitory dorm = new Dormitory();
private static Menu menu = new Menu();
private Student tempStudent;
private Block tempBlock;
private Room room;
private boolean bool;
{
dorm.setDormManager(this);
}
public Manager(String managerName, String managerID) {
name = managerName;
userName = managerID;
}
//find student with its number
public void findStudent() {
//Taking the student number from the user.
System.out.println("Please enter the student number:");
String studentNum = scan.nextLine();
for (int i = 0; i < dorm.getBlockList().size(); i++)
for (int j = 0; j < dorm.getBlockList().get(i).getRooms().size(); j++)
for (int k = 0; k < dorm.getBlockList().get(i).getRooms().get(j).getRoomStudents().size(); k++)
if (dorm.getBlockList().get(i).getRooms().get(j).getRoomStudents().get(k).getStudentNumber().equals(studentNum)) {
tempStudent = dorm.getBlockList().get(i).getRooms().get(j).getRoomStudents().get(k);
break;
}
}
public void create() {
//Used loops for the original program.
Block block1 = new Block("1");
Block block2 = new Block("2");
dorm.getBlockList().add(block1);
dorm.getBlockList().add(block2);
Room room1 = new Room("1");
Room room2 = new Room("2");
dorm.getBlockList().get(0).getRooms().add(room1);
dorm.getBlockList().get(1).getRooms().add(room2);
Student student1 = new Student("12345678");
Student student2 = new Student("98765432");
dorm.getBlockList().get(0).getRooms().get(0).getRoomStudents().add(student1);
dorm.getBlockList().get(1).getRooms().get(0).getRoomStudents().add(student2);
}
public static void main(String[] args) {
Manager manager = new Manager("Dumbledore", "@1112");
manager.create();
}
}
public class Dormitory {
private int blocks;
private Manager dormManager;
private long allMembers;
private ArrayList<Block> blockList = new ArrayList<Block>();
}
public class Block {
private String blockNumber;
private ArrayList<Room> rooms = new ArrayList<Room>();
private Dormitory dorm = new Dormitory();
public Block(String blockNum) {
blockNumber = blockNum;
}
}
public class Room {
private String roomNumber;
private ArrayList<Student> roomStudents = new ArrayList<Student>();
private Block roomBlock;
private Student roomManager;
public Room(String roomNum) {
roomNumber = roomNum;
}
}
public class Student {
private String studentName;
private String studentFamilyName;
private String studentNumber;
private Room room;
public Student(String studentNum) { //Creates a student object using the student number.
studentNumber = studentNum;
}
}
我尽力减少代码。 我搜索了很多,问了很多人,但我没有得到我想要的答案。我不知道为什么我找不到任何关于这个的东西,但如果你能借给我,我会非常感激帮忙或者给我相关文章的链接。
【问题讨论】:
-
提醒一下:你不能在snipplets中运行Java代码
-
请不要做多余的 cmets,例如构造函数上方的“constructor”或变量上方的“variables”。注释应为在某些方面无法记录自身的代码添加详细信息或说明。
-
自我描述的声明、定义或陈述,不需要注释,除非它真的有必要。例如,在
int x = 5; //assigning 5 to variable x的定义中,如果你继续为其他几个代码sn-ps 编写这些cmets,注释真的没用,它会制造更多噪音,而且代码看起来很难看,难以阅读。请记住,让您的代码尽可能简单和干净。 -
嵌套循环没有错。
-
哇,我的评论真的那么糟糕吗?抱歉,我只是想让它更具可读性。我想我应该看到更多好的评论示例。感谢您的建议。
标签: java loops oop arraylist nested-loops