我正在编写一个程序,允许用户进入运动队,然后根据他们输入的球队记录输赢。我很确定我设置阵列的方式是错误的,因为它没有正确地增加输赢,有没有人看到这个问题?
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"));
}
}
答案 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)
问题在于,每当您阅读输赢时,您都会分配winsArray
和lossesArray
。以下两个陈述应该在选项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];
尝试了解出了什么问题以及如何纠正错误。