@Amir1807

Проверить встречается ли строка больше одного раза?

Это учебная задачка, имеется двумерный массив и при бронирования билета второй раз должно выводится что это место уже занято

Enter the number of rows:
> 6
Enter the number of seats in each row:
> 6

1. Show the seats
3. Statistics
0. Exit

> 3

Number of purchased tickets: 0
Percentage: 0.00%
Current income: \$0
Total income: \$360

1. Show the seats
3. Statistics
0. Exit

> 2

Enter a row number:
> 1
Enter a seat number in that row:
> 1

Ticket price: \$10

1. Show the seats
3. Statistics
0. Exit

> 3

Number of purchased tickets: 1
Percentage: 2.78%
Current income: \$10
Total income: \$360

1. Show the seats
3. Statistics
0. Exit
> 2

Enter a row number:
> 1
Enter a seat number in that row:
> 1

That ticket has already been purchased!

Ниже представлен код:
``````import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter the number of rows: ");
int rows = scanner.nextInt();
System.out.println("Enter the number of seats in each row: ");
int seats = scanner.nextInt();

System.out.println();

String[][] arr = createCinema(rows, seats);
while (true) {
System.out.println("1. Show the seats\n" +
"3. Statistics\n" +
"0. Exit");
int choice = scanner.nextInt();
if (choice == 1) {
printCinema(arr);
} else if (choice == 2) {
System.out.println("Enter a row number: ");
int checkRow = scanner.nextInt();
System.out.println("Enter a seat number in that row: ");
int checkSeat = scanner.nextInt();
ticketPrice(rows, seats, checkRow);
arr[checkRow][checkSeat] = "B";
} else if (choice == 3) {
int countOfTickets = 0;
int count = 0;
double percentage;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if (arr[i][j].equals("B")) {
countOfTickets++;
count += currentIncome(rows, seats, i);
}
}
}
percentage = (double) Math.round(count * 100) / totalIncome(rows, seats);

System.out.println("Number of purchased tickets: " + countOfTickets);
System.out.print("Percentage: ");
System.out.format("%.2f", percentage);
System.out.println("%");
System.out.println("Current income: \$" + count);
System.out.println("Total income: \$" + totalIncome(rows, seats));
} else if (choice == 0) {
break;
}
}
}

public static String[][] createCinema(int rows, int seats) {
String[][] arr = new String[rows + 1][seats + 1];
int count = 1;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if (i == 0 && j == 0) {
arr[i][j] = " ";
} else {
arr[i][j] = String.valueOf(count);
count++;
}
if (i > 0 && j == 0) {
arr[i][j] = String.valueOf(i);
} else if (i > 0 && j > 0) {
arr[i][j] = "S";
}
}
}
return arr;
}

public static void printCinema(String[][] cinema) {
System.out.println();
System.out.println("Cinema: ");
for (int i = 0; i < cinema.length; i++) {
for (int j = 0; j < cinema[i].length; j++) {
System.out.print(cinema[i][j]);
System.out.print(" ");
}
System.out.println();
}
System.out.println();
}

public static void ticketPrice(int rows, int seats, int checkRow) {
System.out.println();
if (rows * seats <= 60) {
System.out.println("Ticket price: \$10");
} else {
if (rows % 2 == 0) {
if (checkRow <= rows / 2) {
System.out.println("Ticket price: \$10");
} else {
System.out.println("Ticket price: \$8");
}
} else {
if (checkRow <= rows / 2) {
System.out.println("Ticket price: \$10");
} else {
System.out.println("Ticket price: \$8");
}
}
}
}

public static int currentIncome(int rows, int seats, int checkRow) {
if (rows * seats <= 60) {
return 10;
} else {
if (rows % 2 == 0) {
if (checkRow <= rows / 2) {
return 10;
} else {
return 8;
}
} else {
if (checkRow <= rows / 2) {
return 10;
} else {
return 8;
}
}
}

}

public static int totalIncome(int rows, int seats) {
return rows * seats * 10;
}
}``````
• Вопрос задан
• 71 просмотр
Пригласить эксперта
Ответы на вопрос 1
@azerphoenix Куратор тега Java
Java Software Engineer
Добрый день. Давным-давно писал аналогичный учебный проект про приобретению билета для кино.
Правда, я тогда уже использовал Hibernate + MySQL.
Вот, тут можно глянуть исходники - https://github.com/hasanli-orkhan/learn-java/tree/...

Скажу, что ваш код реализован некорректно.
Во-первых, Java это ООП язык и соответственно, вам нужно использовать всю мощь ООП. Например, создайте pojo Ticket, у каждого билета своя стоимость, а также булево значение isPurchased и т.д. В общем, гляньте на исходник моего проекта станет ясно.

Такой вариант плох тем, что во-первых это скорее процедурный подход, нежели ООП. Во-вторых, представьте, что у вас завтра изменится стоимость билетов и вам нужно править код в нескольких местах. А завтра заказчик скажет, что валюта не в долларах, а в рублях и вам придется заново править код и т.д.
так не должно быть
``````public static void ticketPrice(int rows, int seats, int checkRow) {
System.out.println();
if (rows * seats <= 60) {
System.out.println("Ticket price: \$10");
} else {
if (rows % 2 == 0) {
if (checkRow <= rows / 2) {
System.out.println("Ticket price: \$10");
} else {
System.out.println("Ticket price: \$8");
}
} else {
if (checkRow <= rows / 2) {
System.out.println("Ticket price: \$10");
} else {
System.out.println("Ticket price: \$8");
}
}
}
}``````

Далее если вы оперируете валютой, то лучше использовать BigDecimal, вместо double.

Разделите ваш код на объекты. Например, Cinema, Ticket, Session и др. Далее создайте сервисные классы, в которых будут методы по добавлению фильма, по приобретению билетов и т.д.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
До 250 000 ₽
от 200 000 ₽
Emphasoft Санкт-Петербург
от 150 000 до 300 000 ₽
29 июл. 2021, в 16:28
600 руб./в час
29 июл. 2021, в 16:15
100000 руб./за проект
29 июл. 2021, в 16:14
3000 руб./за проект