- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想制作一个以简单方式分配电影院座位的应用程序。
我有一个 LinkedList,其中随机填充了 0 个“空位”或 1 个“已占位”。这个 LinkedList 由变量 int 'seatsTotal' 生成,LinkedList 然后用 Math.random 函数填充 1 或 0。
想法是用户给出一个变量,即他们想要预订多少个座位,之后,一个(可能是递归的)方法将寻找(示例)5 个标记为 0(可用)的座位。
如果彼此之后(相邻)没有 5 个可用座位,则该方法必须寻找 4 个可用座位和 1 个单独的座位。如果没有 4 个席位可用,应用程序将寻找 3 个席位和 2 个席位等。
我的第一个问题是;我知道我可以使用 LinkedList.contains() 检查某个值是否存在,但我如何检查(例如)0 是否连续出现 5 次?
我的第二个问题是;如果没有 5 个座位可用,我将不得不寻找 4 个座位和 1 个座位(例如),我该如何处理该方法?
我真的被这个问题困住了,非常感谢帮助。
public class Main {
static int seatCount = 10;
int verzoekAantal = 3;
int consecutiveLength = 0; // Consecutive free seats length
int index = 0;
int startIndex = -1; // Store the start of consecutive free seats
LinkedList<Seat> consecutiveList = new LinkedList<>(); // Store startIndex -> length
public static void main(String[] args) {
// System.out.println(Arrays.toString(fillList(seatCount).toArray()));
System.out.println(fillSeats(3).toString());
}
//Deze methode geeft via de Math package een willekeurig getal, 1 (bezet) of 0 (vrij)
static int giveRandomAvailability() {
return intValue(Math.random() * 2);
}
//Deze methode creëert een LinkedList van grootte 'seatCount' en vult de plaatsen een voor een met 0 of 1 op willekeur
static LinkedList fillList(int seats){
LinkedList<Seat> list = new LinkedList<Seat>();
seats = seatCount;
for(int i = 0; i < seats; i++){
Seat seat = new Seat();
seat.availability = giveRandomAvailability();
seat.seatNumber = (i + 1);
list.add(seat);
}
return list;
}
static Map fillSeats(int n){
LinkedList<Seat> newList = fillList(seatCount);
int consecutiveLength = 0; // Consecutive free seats length
int index = 0;
int startIndex = -1; // Store the start of consecutive free seats
int remConsecutiveLength = 0;
System.out.println(newList.toString());
Map<Integer, Integer> consecutiveMap = new HashMap<>(); // Store startIndex -> length
for (Seat seat : newList) {
if (seat.IsFree()) {
if (startIndex < 0) {
startIndex = index;
}
consecutiveLength ++;
} else {
consecutiveMap.put(startIndex + 1, consecutiveLength);
if (consecutiveLength >= n) {
System.out.println("SEATS FOUND, " + n + " seats available counting from " + (seat.seatNumber - n));
}
// if(consecutiveLength > remConsecutiveLength) {
// remConsecutiveLength = consecutiveLength;
// }
startIndex = -1;
consecutiveLength = 0;
}
index++;
}
if (startIndex >= 0) {
consecutiveMap.put(startIndex + 1, consecutiveLength);
}
// if (remConsecutiveLength < n) {
// while(n > 1) {
// System.out.println("Looking for seats which are not next to eachother");
// n--;
// fillSeats(n);
// }
// }
Map<Integer, Integer> treeMap = new TreeMap<Integer, Integer>(consecutiveMap);
return treeMap;
}
}
最佳答案
回答你问题的第一部分:
如果你想找到 n 个连续的空座位,你必须遍历你的 LinkedList 并计算空闲座位,直到你找到 n 个连续的空座位,或者你遍历所有座位。
public List<Seat> findNConsecutiveEmptySeats(List<Seat> seats, int n) {
List<Seat> freeSeats = new LinkedList<Seat>();
for(Seat s : seats) {
if(s.isEmpty()) {
freeSeats.add(s);
} else {
freeSeats.clear();
}
if(freeSeats.size() >= n) {
break;
}
}
if(freeSeats.size() < n) {
freeSeats.clear();
}
return freeSeats;
}
要回答问题的第二部分,您需要使用 n=5 调用前面的方法。如果返回的列表包含 5 个席位,那么很高兴您找到了它们,将其返回。如果它包含一个空列表,则调用 n=4 然后 n=1 的方法。等等……
public List<Seat> findNEmptySeats(List<Seat> seats, int n) {
List<Seats> freeSeats = findNConsecutiveEmptySeats(seats, n);
if(freeSeats.size() == n) {
return freeSeats;
}
freeSeats = findConsecutiveEMptySeats(seats, n-1);
freeSeats.addAll(findConsecutiveEMptySeats(seats, 1));
if(freeSeats.size() == n) {
return freeSeats;
}
freeSeats = findConsecutiveEMptySeats(seats, n-2);
freeSeats.addAll(findConsecutiveEMptySeats(seats, 2));
if(freeSeats.size() == n) {
return freeSeats;
}
...
}
注意:这段代码是不完整的,比如找了n-1个座位后,需要先把找到的座位去掉再找1个座位,否则您可以归还已找到的座位。
关于java - 如何检查链表中的多个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50217636/
我需要根据需要动态设置文本区域,但它不想正常工作。 JQuery 会自行检查,但无法检查是否已检查。但是当您在第二个单选框内单击时,始终需要文本区域。我尝试了很多次让它工作,但它仍然有问题。我添加了“
我需要在 Django 中进行 API 调用(某种形式),作为我们所需的自定义身份验证系统的一部分。用户名和密码通过 SSL 发送到特定 URL(对这些参数使用 GET),响应应该是 HTTP 200
我将在我的可移植 C 代码中使用 #warning 来生成编译时警告。但并非所有平台都支持 #warning。有什么方法可以找到该平台是否支持 #warning。 #ifdef warning
我编写了一个函数来检查某个数字是否存在于某个区间内。停止搜索的最佳方法是什么?这个: for (i = a; i <= b; i++) { fi = f(i); if (fi == c) {
我想知道在 c 中是否有一种方法可以检查,例如在 for 函数中,如果变量等于或不等于某些字符,而不必每次都重复进行相等性检查。如果我没记错的话,以这种方式检查相等性是不正确的: if (a == (
我有如下日志功能 void log_error(char * file_name, int line_num, int err_code) { printf("%s:%d:%s\n", fil
使用 ssh-keygen 生成的 key 对在 macOS 上可以有不同的格式。 macOS 可读的标准 PEM ASN.1 对象 SecKey API 带有文本标题的 PEM OpenSSH ke
我正在尝试编写一个 excel if 语句。我不熟悉使用 Excel 具有的所有额外功能。我正在使用一个名为 importXML() 的函数.我正在尝试检查我正在使用的函数是否生成“#VALUE!”错
有没有办法检查是否没有 AIO 写入给定文件?我在我的 Unix 类(class)上制作了一个项目,该项目将是一个上下文无关(基于 UDP)的国际象棋服务器,并且所有数据都必须存储在文件中。应用程序将
我有一个如下所示的函数: public Status execute() { Status status = doSomething(); if (status != Stat
我正在使用 Composer,我不希望 PhpStorm 在 vendor 文件夹上运行任何错误检查或检查,因为它对 vendor/中的某些代码显示误报composer/autoload_static
Chapel 的一个很好的特性是它区分了数组的域和它的分布。检查两个数组是否具有相同的域和分布(通常想要的)的最佳方法是什么? 我能看到的最好的方法是检查 D1==D2和 D1.dist==D2.di
在我的 JavaScript 函数中,我为所有输入、文本区域和选择字段提供实际值作为 initial_value: $('input, textarea, select').each(function
我正在编写一个分解为几个简单函数的 PHP 类。在构造函数中,它调用另一个名为 processFile 的函数。该函数调用 5 个私有(private)函数并进行检查。如果检查失败,它会将消息分配给
这个问题已经有答案了: How to detect if user it trying to open a link in a new tab? (2 个回答) 已关闭 7 年前。 我认为 JavaS
我正在浏览我们的代码库并看到很多这样的测试: declare @row_id int = ... declare @row_attribute string select @row_attribu
我正在声明一个用作比较的函数。我的问题是: 为什么条件充当语句? 为什么第 4 行可以工作,而第 5 行却不行? 我知道这段代码不切实际且未使用,但为什么编译器允许这种语法? 谷歌没有找到答案。但话又
到目前为止,我有一个带有空文本字段的 PHP Kontaktform,并使用以下命令检查了所需的字段: $name = check_input($_POST['name'], "请输入姓名。"); 现
目前,我能想到的合理检查的唯一方法没有臃肿的逻辑: if ( $value > 0 ) { // Okay } else { // Not Okay } 有没有更好的办法? 最佳答案
我正在尝试运行一个脚本,如果 i 存在(意味着存在 i 值,任何值)或其他部分,我希望运行其中的一部分如果i没有值就运行,有人可以启发我吗? 我说的是 for 循环,比如 for (var i=0;
我是一名优秀的程序员,十分优秀!