Позвольте мне сначала сказать, что это "Лаборатория", которую я делаю для класса, и я работаю над этой второй из двух программ уже около 5 часов, вероятно, 2 из них застряли в этой части. Позвольте мне вначале дать вам требования к программе, чтобы, возможно, все это будет иметь больший смысл.
Диаграмма размещения в кинотеатре реализована как двумерный массив цен на билеты, например:
10 10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 10 10 10
10 10 20 20 20 20 20 20 10 10
10 10 20 20 20 20 20 20 10 10
10 10 20 20 20 20 20 20 10 10
20 20 30 30 40 40 30 30 20 20
20 30 30 40 50 50 40 30 30 20
30 40 50 50 50 50 50 50 40 30
Напишите программу, предлагающую пользователям выбрать место или цену. Марк продал места, изменив цену на 0. Когда пользователь указывает место, убедитесь, что он доступен. Когда пользователь указывает цену, найдите любое место с этой ценой.
Это описание книги, здесь то, что мой профессор дал мне пойти вместе.
Необходимые компоненты программы: начальная диаграмма сидения в этом решении генерируется, как показано в примере. В решении также предполагается, что пользователь войдет в строку и место, которые начинаются с 1 и где строка 1 является нижним передним рядом. Ваша программа должна иметь как минимум 3 статических метода: i) печатать массив, ii) sellSeatByPrice и iii) sellSeatByNumber. Просьба объявить и инициализировать ваш массив указанными ценами на места в главном.
То, что я заработал около двух часов, - это выяснить, как изменить только одно из чисел 2D-массива на 0. Скажем, я вошел в место в течение 30, я изменил свой код примерно 5 раз заставить его работать, и у меня будет либо 30 изменений в 0, либо несколько из них, либо нет. Основная часть, на которую мне нужна помощь, - это метод, называемый sellSeatByPrice(). В настоящее время я не получаю никаких изменений. Вот мой текущий полный код:
import java.util.*;
public class Theater
{
static Scanner in = new Scanner(System.in);
static int[][] seatingChart;
public static void main(String[] args)
{
seatingChart = new int[][] {
{ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 },
{ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 },
{ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 },
{ 10, 10, 20, 20, 20, 20, 20, 20, 10, 10 },
{ 10, 10, 20, 20, 20, 20, 20, 20, 10, 10 },
{ 10, 10, 20, 20, 20, 20, 20, 20, 10, 10 },
{ 20, 20, 30, 30, 40, 40, 30, 30, 20, 20 },
{ 20, 30, 30, 40, 50, 50, 40, 30, 30, 20 },
{ 30, 40, 50, 50, 50, 50, 50, 50, 40, 30 },
};
System.out.println("Welcome to the Box Office Program."); //Introduction Statements
System.out.println("Please note that seats are arranged such that");
System.out.println("row 1, column 1, is the bottom front row.");
System.out.println("Also, a zero denotes the seat is already sold.");
printSeats(seatingChart);
char response = 'Y';
while ((response == 'Y') || (response == 'y'))
{
System.out.print("Pick by Seat <s>, Price <p>, or Quit <q>: ");
char choice = in.next().charAt(0);
switch (choice)
{
case'S':case's':
{ sellSeatByNumber(seatingChart);
break; }
case'P':case'p':
{ sellSeatByPrice(seatingChart);
break; }
case'Q':case'q':
{ System.out.print("Thank you, come again!");
System.exit(0); }
default:
{ System.out.println("Error: Invalid choice."); }
}
System.out.print("Would you like to reserve another seat (Y/N)?: ");
response = in.next().charAt(0);
}
System.out.print("Thank you, come again!");
}
public static void printSeats(int seatingChart[][])
{
for(int i=0; i<seatingChart.length; i++)
{
for(int j=0; j<seatingChart[i].length; j++)
{
if (j>0)
System.out.print("\t");
System.out.print(seatingChart[i][j]);
}
System.out.println();
}
}
public static void sellSeatByPrice(int seatingChart[][])
{
System.out.print("Please enter a price for the seat you would like: ");
int price = in.nextInt();
boolean found = false;
for (int i=0;i<9;i++)
for (int j=0;j<10;j++)
if ((found == true)&&(seatingChart[i][j]==price))
{ seatingChart[i][j]=0; break; }
printSeats(seatingChart);
}
public static void sellSeatByNumber(int seatingChart[][])
{
System.out.println("Enter a row, then enter a seat number.");
System.out.print("What row would you like to sit on?:");
int row = in.nextInt();
row = Math.abs(row-9);
System.out.print("What seat of that row would you like to sit in?:");
int col = in.nextInt();
col -= 1;
if (seatingChart[row][col]!=0)
{
seatingChart[row][col] = 0;
printSeats(seatingChart);
System.out.println("Your seat has been reserved and reflected with a 0 on the chart now.");
}
else { System.out.println("Sorry, that seat is already taken."); }
}
}
(Я извиняюсь, если это выглядит неряшливо, это 3 часа ночи, и я больше не могу думать)
Ваш метод должен выглядеть примерно так:
public static void sellSeatByPrice(int seatingChart[][])
{
System.out.print("Please enter a price for the seat you would like: ");
int price = in.nextInt();
// boolean found = false;
out: for (int i=0;i<9;i++)
for (int j=0;j<10;j++)
if (seatingChart[i][j]==price)
{ seatingChart[i][j]=0; break out; } // Notice this change
printSeats(seatingChart);
}
Сначала вы проверяете found == true
(который, кстати, сокращен до if (found)
). found
инициализируется в false
и никогда не трогается снова, поэтому проверка сбрасывается каждый раз.
Здесь вам даже не нужна логическая переменная. Идите по сиденьям; если сиденье имеет цену, которую вы ищете, установить цену сиденья 0, напечатать массив и вернуться (break
только выходит внутренний for
цикла).