Поиск и изменение только 1 числа двумерного массива

1

Позвольте мне сначала сказать, что это "Лаборатория", которую я делаю для класса, и я работаю над этой второй из двух программ уже около 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 часа ночи, и я больше не могу думать)

Теги:
arrays
2d

2 ответа

0
Лучший ответ

Ваш метод должен выглядеть примерно так:

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);


}
  • 0
    Большое спасибо! Ты просто не знаешь, как я счастлив. И чтобы подумать, нужно всего лишь убрать 1 строку и добавить около 15 символов. Еще раз спасибо, спасибо, спасибо.
  • 0
    Кроме того, если я могу спросить, что делает "вне"?
Показать ещё 3 комментария
0

Сначала вы проверяете found == true (который, кстати, сокращен до if (found)). found инициализируется в false и никогда не трогается снова, поэтому проверка сбрасывается каждый раз.

Здесь вам даже не нужна логическая переменная. Идите по сиденьям; если сиденье имеет цену, которую вы ищете, установить цену сиденья 0, напечатать массив и вернуться (break только выходит внутренний for цикла).

  • 0
    Ты дал мне то, что мне было нужно, но Сурабх дал мне то, что я хотел, лол. Мне нужно было объяснить, что я должен делать, а не код, но я ценю помощь. :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню