【问题标题】:Select vacant seats only from Boolean Array of seat bookings [closed]仅从布尔座位预订数组中选择空缺座位 [关闭]
【发布时间】:2017-07-30 19:01:14
【问题描述】:

我的代码

 Random random = new Random();
 int economySeat = random.nextInt(23 - 12 + 1) + 12;
 seatNumber = economySeat;
 if (seatManager.getSeats()[seatNumber] == false) {
   seatManager.getSeats()[seatNumber] = true;
 }

从所示范围内的布尔数组中随机选择经济舱座位。如何仅在运行程序时选择空位?目前,例如,当只剩下一个座位时,我必须多次按下选择按钮,例如

【问题讨论】:

  • 你是什么意思,你必须点击一个选择按钮?我的意思是,您的代码设计为运行一次。因此,如果您调用该代码,它要么找到座位,要么找不到。
  • 首先检查数组中是否存在false 值。然后,您将您发布的整个代码放在一个 while 中,只退出 if (seatManager.getSeats()[seatNumber] == false)。也可以考虑synchronize上面的代码。
  • 它正确地找到了一个座位,但目前在我的网络应用程序中它一直在寻找重复项,即。已经预订的座位。我有什么作品,但有点基本。
  • 将空缺席位放入列表中,在0到空缺席位列表大小之间选择一个随机数,将此席位的空缺字段设置为false,将其从列表中删除。或者只是计算空座位的数量,在 0 和这个数字之间选择一个数字 r,并将第 r 个 vavant 设置为 true。
  • @j.e.gr 这是非常低效的。同步是无关紧要的。

标签: java arrays boolean


【解决方案1】:

此解决方案不允许 SeatManager 的使用者提交随机数来获得座位。相反,它使用座位的随机索引返回一个随机的随机座位号。我认为这是更干净的实施。您可以针对您的 UI 进行调整。

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Random;

public class SeatConsumer
{

    public static void main(String [] Args)
    {
        SeatManager sm = new SeatManager();

        int RandomEconomySeat = 0;
        while(RandomEconomySeat > -1)
        {
            RandomEconomySeat = sm.GetRandomEconomySeat();
            if(RandomEconomySeat > -1 && sm.SetEconomySeat(RandomEconomySeat))
            {
                System.out.println(sm); 
            }
            else
            {
                return;
            }
        }
    }


}


class SeatManager
{

    private final int StartingEconomy = 12;
    private final int EndingEconomy = 24;
    private boolean [] seats;

    private ArrayList<Integer> availableSeats = new ArrayList<Integer>();
    private ArrayList<Integer> seatIndexes = new ArrayList<Integer>();
    public SeatManager()
    {
        seats = new boolean[(EndingEconomy+1)-StartingEconomy];
        for(int i=StartingEconomy; i<=EndingEconomy; i++)
        {
            availableSeats.add(i);
            seatIndexes.add(i);
        }
    }

    public int GetRandomEconomySeat()
    {
        Random random = new Random();
        random.setSeed((Calendar.getInstance().getTimeInMillis()));

        if(availableSeats.size() > 0)
        {
          int randomIndex = random.nextInt(availableSeats.size());
          return availableSeats.get(randomIndex);
        }
        return -1;

    }


    public boolean SetEconomySeat(int seat)
    {
        if(seat >0)
        {
            int seatIndex = seatIndexes.indexOf(seat);
            seats[seatIndex]=true;
            if(availableSeats.contains(seat))
            {
               int availSeatIndex = availableSeats.indexOf(seat);
               availableSeats.remove(availSeatIndex);
               return true;
            }
            return false;

        }
        return false;   

    }

    public String toString()
    {
        String temp = "";
        for(boolean b : seats)
        {
            //should use string builder; however this is a quick example
            if(b)
            {
                temp += "1 ";

            }
            else 
            {
                temp += "0 ";
            }
        }
        return temp;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多