增加数组值java

时间:2013-03-11 05:19:52

标签: java arrays increment

我正在编写一个程序,允许用户进入运动队,然后根据他们输入的球队记录输赢。我很确定我设置阵列的方式是错误的,因为它没有正确地增加输赢,有没有人看到这个问题?

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"));

}

}

3 个答案:

答案 0 :(得分:1)

您必须一次初始化选项#1中的所有数组,而不是像这样在选项#3/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];
            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"));

}

}

答案 1 :(得分:0)

问题在于,每当您阅读输赢时,您都会分配winsArraylossesArray。以下两个陈述应该在选项1中:

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

答案 2 :(得分:0)

如果你像这样初始化数组,编译器会认为这三个变量是teamArray, winsArray和lossesArray是大小为零的arraytype。这意味着您可以在数组中添加任何值,当您尝试访问teamsArray [i]时会导致错误。

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

因此,当用户选择第一选项创建联盟时,尝试初始化阵列,如ravidra所说。

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

尝试了解出了什么问题以及如何纠正错误。