用户创建房间
房间号递增:1,2,3,4,5....然后房间里的人都走后 就把房间删除
1,4,5......再当有用户创建 就填空
1,2,4,5,....
这个功能怎么实现呢?

解决方案 »

  1.   


    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);
    }
    }
    }
      

  2.   

    没注意要删一行代码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);
    }
    }
    }
      

  3.   


    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 --;
    }
    }
    }
    简单写了一下 判断没怎么做,自己加吧
      

  4.   

    游戏房间模式不是这种情况的比如 qq 和 浩方还有 vs都是房间数是固定的,因为有最大承受能力制约,
    而 房间就算一个人都没有 也是一直在,不会出现所有人都退出这个房间之后房间自动删除这个情况。其实你这个问题应该是和排座位差不多
    等已经有座位的人走了之后 ,下一次来了人之后应该把刚走了的这个人的座位分给他。
      

  5.   

    7楼
    我想实现的是那种类似泡泡堂的游戏房间
    如果此房间没有玩家 我就直接=null了这样的话 客户端向我请求房间列表
    我直接if(room!=null) 就给返回去
    感觉这样可能跟简单点或许你说的也有道理
    房间都是固定的
    减少删除和创建的开销 
    但是似乎过滤没有人的房间不太好处理 有可能会有问题
      

  6.   

    以前大学Java期末作业就是这个。
      

  7.   

    容器啊,相当重要也很实用的啊,JAVA的容器把数据结构封装得跟啥东东了。