List<Integer> createRoom = new ArrayList<Integer>(); // 用于存放创建的房间 List<Integer> emptyRoom = new ArrayList<Integer>(); // 用语存放空出来的房间 public void addRoom() { if (emptyRoom.size() > 0) { createRoom.add(emptyRoom.get(0)); } else { int addnum = createRoom.get(createRoom.size() - 1) + 1; createRoom.add(addnum); } } public void leaveRoom(int roomNum) { if (emptyRoom.size() == 0) { emptyRoom.add(roomNum); } else { if (emptyRoom.get(0) > roomNum) { emptyRoom.add(0, roomNum); } else if(emptyRoom.get(emptyRoom.size()-1)<roomNum){ emptyRoom.add(emptyRoom.size()+1); } else{ for(int i=0;i<emptyRoom.size();i++){ if (emptyRoom.get(i) < roomNum && emptyRoom.get(i + 1) > roomNum) { emptyRoom.add(i + 1, roomNum); break; } } } } emptyRoom.add(roomNum); for (int i = 0; i < createRoom.size(); i++) { if (roomNum == createRoom.get(i)) { createRoom.remove(i); } } }
没注意要删一行代码List<Integer> createRoom = new ArrayList<Integer>(); // 用于存放创建的房间 List<Integer> emptyRoom = new ArrayList<Integer>(); // 用语存放空出来的房间 public void addRoom() { if (emptyRoom.size() > 0) { createRoom.add(emptyRoom.get(0)); } else { int addnum = createRoom.get(createRoom.size() - 1) + 1; createRoom.add(addnum); } } public void leaveRoom(int roomNum) { if (emptyRoom.size() == 0) { emptyRoom.add(roomNum); } else { if (emptyRoom.get(0) > roomNum) { emptyRoom.add(0, roomNum); } else if(emptyRoom.get(emptyRoom.size()-1)<roomNum){ emptyRoom.add(emptyRoom.size()+1); } else{ for(int i=0;i<emptyRoom.size();i++){ if (emptyRoom.get(i) < roomNum && emptyRoom.get(i + 1) > roomNum) { emptyRoom.add(i + 1, roomNum); break; } } } } //emptyRoom.add(roomNum);这行多余的 for (int i = 0; i < createRoom.size(); i++) { if (roomNum == createRoom.get(i)) { createRoom.remove(i); } } }
import java.util.ArrayList; import java.util.List; public class test3 { public static void main(String[] args) { Room r = new Room(); // 初始化房间列表 r.InitRoom();
// 新建一个房间 返回这个房间的序号 for(int i = 0; i < 5; i ++) System.out.println("新建一个房间 序号:" + r.newRoom());
List<Integer> createRoom = new ArrayList<Integer>(); // 用于存放创建的房间 List<Integer> emptyRoom = new ArrayList<Integer>(); // 用语存放空出来的房间 public void addRoom() {
if (emptyRoom.size() > 0) {
createRoom.add(emptyRoom.get(0));
} else {
int addnum = createRoom.get(createRoom.size() - 1) + 1;
createRoom.add(addnum);
}
} public void leaveRoom(int roomNum) {
if (emptyRoom.size() == 0) {
emptyRoom.add(roomNum);
} else {
if (emptyRoom.get(0) > roomNum) {
emptyRoom.add(0, roomNum);
}
else if(emptyRoom.get(emptyRoom.size()-1)<roomNum){
emptyRoom.add(emptyRoom.size()+1);
}
else{
for(int i=0;i<emptyRoom.size();i++){
if (emptyRoom.get(i) < roomNum && emptyRoom.get(i + 1) > roomNum) {
emptyRoom.add(i + 1, roomNum);
break;
}
}
}
}
emptyRoom.add(roomNum);
for (int i = 0; i < createRoom.size(); i++) {
if (roomNum == createRoom.get(i)) {
createRoom.remove(i);
}
}
}
if (emptyRoom.size() > 0) {
createRoom.add(emptyRoom.get(0));
} else {
int addnum = createRoom.get(createRoom.size() - 1) + 1;
createRoom.add(addnum);
}
} public void leaveRoom(int roomNum) {
if (emptyRoom.size() == 0) {
emptyRoom.add(roomNum);
} else {
if (emptyRoom.get(0) > roomNum) {
emptyRoom.add(0, roomNum);
}
else if(emptyRoom.get(emptyRoom.size()-1)<roomNum){
emptyRoom.add(emptyRoom.size()+1);
}
else{
for(int i=0;i<emptyRoom.size();i++){
if (emptyRoom.get(i) < roomNum && emptyRoom.get(i + 1) > roomNum) {
emptyRoom.add(i + 1, roomNum);
break;
}
}
}
}
//emptyRoom.add(roomNum);这行多余的
for (int i = 0; i < createRoom.size(); i++) {
if (roomNum == createRoom.get(i)) {
createRoom.remove(i);
}
}
}
import java.util.ArrayList;
import java.util.List;
public class test3 {
public static void main(String[] args) {
Room r = new Room();
// 初始化房间列表
r.InitRoom();
// 新建一个房间 返回这个房间的序号
for(int i = 0; i < 5; i ++)
System.out.println("新建一个房间 序号:" + r.newRoom());
System.out.println("----------------");
// 给第一个房间增加一个用户
r.addUserInRoom(1);
// 给第三个房间增加三个用户
r.addUserInRoom(3);
r.addUserInRoom(3);
r.addUserInRoom(3);
System.out.println("----------------");
// 显示每个房间的状态
for(int i = 1; i <= r.getRoomCount(); i ++)
System.out.println(String.format("第 %d 房间中 有 %d 个用户", i , r.getUserCount(i))); System.out.println("----------------");
// 使第二个房间为空
r.removeUserInRoom(2); System.out.println("----------------");
// 显示每个房间的状态
for(int i = 1; i <= r.getRoomCount(); i ++)
System.out.println(String.format("第 %d 房间中 有 %d 个用户 0个用户表示这个房间已经删除", i , r.getUserCount(i))); System.out.println("----------------");
System.out.println("新建一个房间 序号:" + r.newRoom());
}
}class Room {
private List<Room> roomList;
private int userCount;
public void InitRoom() {
roomList = new ArrayList<Room>();
}
public int newRoom() {
Room room = new Room();
room.userCount = 1;
for(int i = 0; i < roomList.size(); i ++) {
if(roomList.get(i) == null) {
roomList.set(i, room);
return i+1;
}
}
roomList.add(room);
return roomList.size();
}
public int getRoomCount() {
return roomList.size();
}
public int getUserCount(int roomIndex) {
if(roomIndex > 0)
roomIndex --;
else
roomIndex = 0;
Room room = roomList.get(roomIndex);
return room != null ? room.userCount : 0;
}
public void addUserInRoom(int roomIndex) {
if(roomIndex > 0)
roomIndex --;
else
roomIndex = 0;
Room room = roomList.get(roomIndex);
room.userCount ++;
}
public void removeUserInRoom(int roomIndex) {
if(roomIndex > 0)
roomIndex --;
else
roomIndex = 0;
Room room = roomList.get(roomIndex);
if(room.userCount == 1) {
roomList.set(roomIndex, null);
} else {
room.userCount --;
}
}
}
简单写了一下 判断没怎么做,自己加吧
而 房间就算一个人都没有 也是一直在,不会出现所有人都退出这个房间之后房间自动删除这个情况。其实你这个问题应该是和排座位差不多
等已经有座位的人走了之后 ,下一次来了人之后应该把刚走了的这个人的座位分给他。
我想实现的是那种类似泡泡堂的游戏房间
如果此房间没有玩家 我就直接=null了这样的话 客户端向我请求房间列表
我直接if(room!=null) 就给返回去
感觉这样可能跟简单点或许你说的也有道理
房间都是固定的
减少删除和创建的开销
但是似乎过滤没有人的房间不太好处理 有可能会有问题