我们必须检查座位情况并在同一排连续预订两张票。 如果门票不可用或者如果从两个不同的行预订了两张门票,那么我们必须抛出异常(使用数组) 条件1:如果我选择第七和第八个座位,因为它们来自不同的排,我们不应该允许他们。 条件2:如果我输入100和101的座位,由于指定的座位没有空位,我们不应该预订座位。`
It would be great, if someone could help out on this,
封装演示;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.List;
public class Newtable {
public static void printRow(int[] row) {
for (int i : row) {
System.out.print(i);
System.out.print("\t");
}
System.out.println();
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int twoDm[][] = new int[5][7];
int i, j, k = 1, m = 2;
int ab = 0;
int firstticket;
int secondticket;
boolean firstTicketFlag = false;
boolean secondTicketFlag = false;
for (i = 0; i < 5; i++) {
for (j = 0; j < 7; j++) {
twoDm[i][j] = k;
k++;
}
}
for (int[] row : twoDm) {
printRow(row);
}
// this loop repeats the reserving process (and printing seats) 5 times
for (int l = 0; l < 5; l++) {
System.out.print("Enter the Seats number to reserve: ");
firstticket = Integer.parseInt(br.readLine());
secondticket = Integer.parseInt(br.readLine());
firstTicketFlag = containsCheck(twoDm, firstticket);
secondTicketFlag = containsCheck(twoDm, firstticket);
if (firstTicketFlag && secondTicketFlag) {
if (firstticket == (secondticket - 1)) {
k = 1;
m = 2;
for (i = 0; i < 5; i++) {
for (j = 0; j < 7; j++) {
if (k == firstticket && m == secondticket) {
// here we check if the seat has already been
// reserved
ab = m - 1;
if (twoDm[i][j] == 0 && twoDm[i][j+1] == 0) {
throw new Exception("That seat has already been reserved");
}
// if its not reserved then reserve it
else {
//ab = m - 1;
twoDm[i][j] = 0;
twoDm[i][j+1] = 0;
}
}
k++;
m++;
}
}
// print updated array of seats
for (int[] row : twoDm) {
printRow(row);
}
} else {
throw new Exception(" select two seats in the same row");
}
} else {
System.out.println("Please enter the available seat numbers");
}
}
}
private static boolean containsCheck(int[][] twoDm, int ticket) {
// TODO Auto-generated method stub
boolean flag = false;
for (int[] a : twoDm) {
if (a.equals(ticket)) {
flag = true;
}
}
return flag;
}
}
最佳答案
第二个TicketFlag 未正确检查:
secondTicketFlag = containsCheck(twoDm, firstticket);
//should be
secondTicketFlag = containsCheck(twoDm, secondticket);
containsCheck 需要另一个 for 循环来检查行内每个座位的单独值(一维数组):
private static boolean containsCheck(int[][] twoDm, int ticket) {
// TODO Auto-generated method stub
boolean flag = false;
// added another for loop, and changed "equals" to == since the values are int
for (int[] oneDm : twoDm) {
for (int individualSeat : oneDm) {
if (individualSeat == ticket) {
flag = true;
}
}
}
return flag;
}
如果第一个座位或第二个座位已被预订,那么您想返回错误,
if (twoDm[i][j] == 0 && twoDm[i][j+1] == 0)
//should be
if (twoDm[i][j] == 0 || twoDm[i][j+1] == 0)
对于任何格式错误(第一次发表评论)表示抱歉,希望这能解决您遇到的问题。
编辑:您有多种方法来检查座位是否在同一排,考虑到您放置座位值的方式,我会使用余数 (%) 运算符
如果第一个座位的余数不为0,则表示两个座位在同一排(第一个座位必须在1-6、8-13、15-20之间……不能是7 的倍数),您还可以在 for 循环中使用 j 值。这取决于你。检查余数的方法:
if(firstticket % 7 == 0){ System.out.println("The seats are not in the same row");}
关于java - 使用数组在特定行预订电影票,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59767898/