首页 > 解决方案 > 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] && 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] && 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 && 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 && 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;
    }
}

标签: javaloops

解决方案


if (flag) {
    System.out.println("Error: Invalid Jersey Number... Try Again...");
}                        }

删除!解决问题。此外,它上面的几行是

playerJerseyNumber[i] = playerNewJersey;
playerJerseyNumber[i] = playerJersey;

我不明白您为什么需要将其重新分配给 playerJersey。这将导致球衣号码无法更新。


推荐阅读