我们必须检查座位的空位情况,并在同一排预定两张连续的票。如果没有票,或者两张票是从两个不同的行预订的,那么我们必须抛出一个异常(使用数组)条件1:如果我选择了第7和第8座位,因为它来自不同的行,我们不应该允许它们。条件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;
}
}发布于 2020-01-16 11:08:04
未正确检查secondTicketFlag:
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");}https://stackoverflow.com/questions/59767898
复制相似问题