#java #loops
#java #циклы
Вопрос:
У меня возникли проблемы с программой, и, похоже, я не могу решить проблему. У меня есть программа для составления списка команд, которая дает возможность заменить номер и рейтинг игрока, но когда используется эта опция, цикл продолжается, и он не заканчивается, и я возвращаюсь в меню для других опций. Если бы кто-нибудь мог помочь мне указать правильное направление, это было бы оценено.
import java.util.Scanner;
class PlayerRoster {
public static void main(String[] args) {
Scanner scanner = null;
try {
scanner = new Scanner(System.in);
int[] playerJerseyNumber = new int[5];
int[] playerRating = new int[5];
for (int i = 0; i < 5; i ) {
//Taking jersey number till it is in the range of 0-99
while (true) {
System.out.println("Enter player " (i 1)
"'s jersey number:");
playerJerseyNumber[i] = scanner.nextInt();
if (0 <= playerJerseyNumber[i] amp;amp; playerJerseyNumber[i] <= 99) {
break;
} else {
System.out.println("Jersey number must be 0-99");
}
}
//Taking playerRating till it is in the range of 1-9
while (true) {
System.out.println("Enter player " (i 1) "'s rating:");
playerRating[i] = scanner.nextInt();
if (1 <= playerRating[i] amp;amp; playerRating[i] <= 9) {
break;
} else {
System.out.println("Player's ratings must be 1-9");
}
}
System.out.println("");
}
System.out.println("ROSTER");
//Displaying the rosters
for (int i = 0; i < 5; i ) {
System.out.println("Player " (i 1) " -- Jersey number: "
playerJerseyNumber[i] ", Rating: "
playerRating[i]);
}
System.out.println("");
//Printing the menu
do {
System.out.println("MENU " "u - Update player rating");
System.out.println("a - Output players above a rating");
System.out.println("r - Replace player");
System.out.println("o - Output roster");
System.out.println("q - Quit");
System.out.println("");
System.out.println("Choose an option:");
char choice = scanner.next().charAt(0);
switch (choice) {
case 'u': {
System.out.println("Enter a jersey number:");
int playerJersey = scanner.nextInt();
System.out.println("Enter a new rating for player:");
int newRating = scanner.nextInt();
for (int i = 0; i < 5; i ) {
if (playerJerseyNumber[i] == playerJersey) {
playerRating[i] = newRating;
break;
}
}
}
break;
case 'a': {
System.out.println("Enter a rating:");
int aboveRating = scanner.nextInt();
System.out.println("ABOVE " aboveRating);
for (int i = 0; i < 5; i ) {
if (playerRating[i] > aboveRating) {
System.out.println("Player " (i 1)
" -- Jersey number: "
playerJerseyNumber[i] ", Rating: "
playerRating[i]);
}
}
}
break;
case 'r': {
boolean flag = true;
do {
System.out.println("Enter a jersey number:");
int newRating, playerNewJersey;
int playerJersey = scanner.nextInt();
for (int i = 0; i < 5; i ) {
if ((playerJerseyNumber[i] == playerJersey)) {
//Taking jersey number till it is in the range of 0-99
while (true) {
System.out.println("Enter a new jersey number:");
playerNewJersey = scanner.nextInt();
if (0 <= playerNewJersey amp;amp; playerNewJersey <= 99) {
break;
} else {
System.out.println("Jersey number must be 0-99");
}
}
//Taking playerRating till it is in the range of 1-9
while (true) {
System.out.println("Enter a new rating for player:");
newRating = scanner.nextInt();
if (1 <= newRating amp;amp; newRating <= 9) {
break;
} else {
System.out.println("Player's ratings must be 1-9");
}
}
playerJerseyNumber[i] = playerNewJersey;
playerJerseyNumber[i] = playerJersey;
playerRating[i] = newRating;
flag = false;
break;
}
}
if (!flag) {
System.out.println("Error: Invalid Jersey Number... Try Again...");
}
} while (flag);
}
break;
case 'o': {
System.out.println("ROSTER");
for (int i = 0; i < 5; i ) {
System.out.println("Player " (i 1)
" -- Jersey number: " playerJerseyNumber[i]
", Rating: " playerRating[i]);
}
}
break;
case 'q':
break;
default:
break;
}
if (choice == 'q') break;
} while (true);
} catch (Exception e) {
}
return;
}
}
Комментарии:
1. Вы пытались отладить свою программу?
Ответ №1:
if (flag) {
System.out.println("Error: Invalid Jersey Number... Try Again...");
} }
Удаление ! решает проблему. Кроме того, в нескольких строках над ним есть
playerJerseyNumber[i] = playerNewJersey;
playerJerseyNumber[i] = playerJersey;
Я не понимаю, почему вам нужно переназначить его на playerJersey. Это приведет к тому, что номер джерси не будет обновляться.
Комментарии:
1. Когда я пытаюсь заменить номер / рейтинг джерси для игрока, он изменяет его, но я не уверен, как заставить его вернуться в меню после изменения информации об отдельных игроках, он просто продолжает спрашивать, какого игрока сменить.
2. Кажется, он отлично работает с изменениями, которые я предложил. Вы можете попробовать это здесь ( repl.it/repls/ConfusedSereneConsulting ) и посмотрите, происходит ли то, что вы говорите, по-прежнему.