цикл java не завершится

#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 ) и посмотрите, происходит ли то, что вы говорите, по-прежнему.