-4

ユーザーがスポーツチームに参加し、参加したチームに基づいて勝敗を記録できるプログラムを書いています。勝敗を正しくインクリメントしていないため、アレイをセットアップする方法が間違っていると確信しています。誰か問題を見ていますか?

import java.util.Scanner;

public class sports {


public static void main(String[] args) {


    System.out.println("Howdy sports fan!");

    String menuSelect;
    String winSelect;
    String loseSelect;
    int teamSize = 0;

    String[] teamsArray = new String[0];
    int[] winsArray = new int[0];
    int[] lossesArray = new int[0];


    do {

        System.out.println("Please pick an option from the list below:");
        System.out.println("1) Create League");
        System.out.println("2) List all teams");
        System.out.println("3) Record a win");          
        System.out.println("4) Record a loss");         
        System.out.println("5) Quit");          
        Scanner keyboard = new Scanner(System.in);
        menuSelect = keyboard.nextLine();

        if ( menuSelect.equals("1") )
        {

            System.out.println("How many teams should I make?");
            try
            {
            teamSize = Integer.parseInt(keyboard.nextLine());
            }
            catch (NumberFormatException e)
            {
                System.out.println("Invalid entry, try again.");
            }

            teamsArray = new String[teamSize];

            for ( int i = 0; i < teamsArray.length; ++i )
            {
                System.out.println("Team " + (i+1) + "'s name?");
                teamsArray[i] = keyboard.nextLine();                
            }
        }

        else if ( menuSelect.equals("2") )
        {

            if (teamsArray.length == 0)
            {
                System.out.println("There are no teams!");
            }
            else


            System.out.printf("%21s %21s %n", "W", "L");

            for ( int i = 0; i < teamsArray.length; ++i )
            {
                System.out.printf(teamsArray[i] + "%20d %21d %n", winsArray[i], lossesArray[i]);

            }
        }

        else if ( menuSelect.equals("3") )
        {
            winsArray = new int[teamSize];
            System.out.println("Which team won a game?");
            winSelect = keyboard.nextLine();

            for ( int i = 0; i < teamsArray.length; ++i )
            {
                if ( winSelect.equals(teamsArray[i]) )
                {
                    ++winsArray[i];
                }
            }
        }

        else if ( menuSelect.equals("4") )
        {
            lossesArray = new int[teamSize];
            System.out.println("Which team lost a game?");
            loseSelect = keyboard.nextLine();

            for ( int i = 0; i < teamsArray.length; ++i )
            {
                if ( loseSelect.equals(teamsArray[i]) )
                {
                    ++lossesArray[i];
                }
            }
        }
        else
        {
            System.out.println("Invalid Selection");
        }


    } while(!menuSelect.equals("5"));

}

}
4

3 に答える 3

1

このように Option#3/4 で初期化する代わりに、Option#1 ですべての配列を一度に初期化する必要があります。

import java.util.Scanner;

public class sports {


public static void main(String[] args) {


    System.out.println("Howdy sports fan!");

    String menuSelect;
    String winSelect;
    String loseSelect;
    int teamSize = 0;

    String[] teamsArray = new String[0];
    int[] winsArray = new int[0];
    int[] lossesArray = new int[0];


    do {

        System.out.println("Please pick an option from the list below:");
        System.out.println("1) Create League");
        System.out.println("2) List all teams");
        System.out.println("3) Record a win");          
        System.out.println("4) Record a loss");         
        System.out.println("5) Quit");          
        Scanner keyboard = new Scanner(System.in);
        menuSelect = keyboard.nextLine();

        if ( menuSelect.equals("1") )
        {

            System.out.println("How many teams should I make?");
            try
            {
            teamSize = Integer.parseInt(keyboard.nextLine());
            }
            catch (NumberFormatException e)
            {
                System.out.println("Invalid entry, try again.");
            }

            teamsArray = new String[teamSize];
            winsArray = new int[teamSize];
            lossesArray = new int[teamSize];

            for ( int i = 0; i < teamsArray.length; ++i )
            {
                System.out.println("Team " + (i+1) + "'s name?");
                teamsArray[i] = keyboard.nextLine();                
            }
        }

        else if ( menuSelect.equals("2") )
        {

            if (teamsArray.length == 0)
            {
                System.out.println("There are no teams!");
            }
            else


            System.out.printf("%21s %21s %n", "W", "L");

            for ( int i = 0; i < teamsArray.length; ++i )
            {
                System.out.printf(teamsArray[i] + "%20d %21d %n", winsArray[i], lossesArray[i]);

            }
        }

        else if ( menuSelect.equals("3") )
        {
            System.out.println("Which team won a game?");
            winSelect = keyboard.nextLine();

            for ( int i = 0; i < teamsArray.length; ++i )
            {
                if ( winSelect.equals(teamsArray[i]) )
                {
                    ++winsArray[i];
                }
            }
        }

        else if ( menuSelect.equals("4") )
        {
            System.out.println("Which team lost a game?");
            loseSelect = keyboard.nextLine();

            for ( int i = 0; i < teamsArray.length; ++i )
            {
                if ( loseSelect.equals(teamsArray[i]) )
                {
                    ++lossesArray[i];
                }
            }
        }
        else
        {
            System.out.println("Invalid Selection");
        }


    } while(!menuSelect.equals("5"));

}

}
于 2013-03-11T05:25:30.930 に答える
0

このように配列を初期化すると、コンパイラはこれら 3 つの変数 teamArray、winsArray、および lossArray がサイズ 0 の arraytype であると見なします。これは、配列に任意の値を追加できることを意味し、teamsArray[i] のようにアクセスしようとするとエラーになります。

String[] teamsArray = new String[0];
int[] winsArray = new int[0];
int[] lossesArray = new int[0];

そのため、ravidra が言ったように、ユーザーがオプション 1 を選択してリーグを作成するときに、配列を初期化してみてください。

teamsArray = new String[teamSize];
winsArray = new int[teamSize];
lossesArray = new int[teamSize];

何がうまくいかなかったのか、それを修正する方法を学びましょう。

于 2013-03-11T05:57:43.730 に答える
0

問題は、勝敗を読み取るたびにwinsArrayandを割り当てていることです。lossesArrayオプション 1 には、次の 2 つのステートメントを含める必要があります。

winsArray = new int[teamSize];
lossesArray = new int[teamSize];
于 2013-03-11T05:27:05.793 に答える