随机分配座位,共n个学生,使学号相邻的同学座位不能相邻。座位肯定也是n个,如果座位多余学生个数,这种情况
没有考虑。!也是一种问题。。。
我的思路是,先定义50个拥有学号的学生并且该学生对象中保存他的学号(-1:学生不存在),座位号(-1:尚未分
配),以及他前一个与后一个同学的信息,同时定义50个座位,然后将其存放到两个集合中,一个存放学生,一个存
放座位,打印分配前的信息。在学生集合中随机选择一个学生进行分配座位,座位编号取自座位集合,被分配的座位
要从座位集合中移除,已分配座位的学生也要从学生集合中移除,对于分配座位时,要分情况讨论,学号最前与最后
的同学只需要考虑一个同学的情况,而学号位于中间的学生分配座位要考虑他学号前后学生的座位编号(如果已经分
配了座位),看是否相邻,相邻则另外重新随机选择座位编号,直到不相邻,直到最后学生,座位都分配完。打印分
配后的信息。
一共两个类,一个学生类,一个主程序,代码如下:(运行截图附在最后)
package study;
public class Student {
private int stuId;//学生的学号(用1,2,3.。。。来模拟)
private int seatId;//学生的座位号(用1,2,3.。。。来模拟)
private Student preStudent;//与当前学生学号相邻的前一个学生(当前学号:2,前一个学号:1)
private Student nextStudent;//与当前学生学号相邻的后一个学生(当前学号:2,后一个学号:3)
public Student() {
super();
}
@Override
public String toString() {
return "Student [stuId=" + stuId + ", seatId=" + seatId + ", preStudent=" + preStudent + ", nextStudent="
+ nextStudent + "]";
}
public int getStuId() {
return stuId;
}
public void setStuId(int stuId) {
this.stuId = stuId;
}
public int getSeatId() {
return seatId;
}
public void setSeatId(int seatId) {
this.seatId = seatId;
}
public Student getPreStudent() {
return preStudent;
}
public void setPreStudent(Student preStudent) {
this.preStudent = preStudent;
}
public Student getNextStudent() {
return nextStudent;
}
public void setNextStudent(Student nextStudent) {
this.nextStudent = nextStudent;
}
}
package study;
import java.util.ArrayList;
import java.util.Random;
public class DistributeSeat {
// 定义n个学生
public static ArrayList<Student> defineStu(int n) {
ArrayList<Student> arrayList = new ArrayList<Student>();// 存放n个学号相邻的学生的集合
// 先定义n个学号相邻的学生
for (int i = 1; i <= n; i++) {
Student student = new St
给n个学生分配n个座位,要求学号相邻的学生座位不相邻!
最新推荐文章于 2021-04-01 16:27:11 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)