Я пытаюсь сделать двумерный массив полудинамическим. Таким образом, он не использует списки массивов и не является полностью динамическим, где пользователь может добавлять или удалять элементы, но программа должна иметь возможность запрашивать у пользователя количество команд, а затем запрашивать имя каждой команды и количество игроков в команде и наконец, имя каждого игрока в каждой команде. Ниже то, что я сделал до сих пор. Код работает, но не выводит команды и игроков. Пожалуйста, помогите как можно скорее :)
import java.util.Scanner;
public class semi_dynamic
{
public static void main(String[] args)
{
//Variable Declarations and Initializations
String sNumPlayers = "";
int numPlayers=0, numTeams=0;
//String sTeams[]=new String[3];
String sPlayers[][] =new String[3][];//want an array of arrays but do not know how many teams players there are per team
Scanner scanner= new Scanner(System.in);
System.out.println("How many teams are there:");
numTeams=scanner.nextInt();
String sTeams[]=new String [numTeams];
for(int i=0;i<sTeams.length;i++)
{
System.out.println("\nPlease enter in team name #"+(i+1)+":");
sTeams[i]=scanner.next();
}//end for loop
for(int i=0;i<sPlayers.length;i++)
{
System.out.println("\nHow many players are there in team "+sTeams[i]+":");
sNumPlayers=scanner.next();
numPlayers=Integer.parseInt(sNumPlayers);
sPlayers[i]=new String[numPlayers];
for(int j=0;j<sPlayers[i].length;j++)
{
System.out.println("\nPlease enter in team player #"+(j+1)+" for team "+sTeams[i]+":");
sPlayers[i][j]=scanner.next();
}//end for loop
}//end for loop
System.out.println("\n=====================================\nTEAMS PLAYERS\n");
for(int i=0;i<sPlayers.length;i++)
{
System.out.print(sTeams[i]+"\t ");
for (int j=0;j<sPlayers.length;j++)
{
System.out.print(" "+sPlayers[i][j]+"\t ");
}//end for loop
System.out.println("\n----------------------------------------------------------------------------------------------------\n");
}//end for loop
}//end main
}//end class




Первая ошибка:
String sPlayers[][] =new String[**3**][];
Вы всегда пытаетесь ввести имена игроков для 3 команд. Измените его на:
numTeams=scanner.nextInt();//also make sure to handle InputMismatchException for non integer inputs
String sTeams[]=new String [numTeams];
String sPlayers[][] =new String[numTeams][];//now it works for user entered number of teams
При печати имен игроков каждой команды:
for(int i=0;i<sPlayers.length;i++)
{
System.out.print(sTeams[i]+"\t ");
for (int j=0;j< **sPlayers.length** ;j++)//j<numTeams, it should be j<num of players for each team
{
System.out.print(" "+sPlayers[i][j]+"\t ");
}//end for loop
System.out.println("\n----------------------------------------------------------------------------------------------------\n");
}//end for loop
Измените условие внутреннего цикла на sPlayer [i] .length
for(int i=0;i<sPlayers.length;i++)
{
System.out.print(sTeams[i]+"\t ");
for (int j=0;j<sPlayers[i].length;j++)//now j<num of players of ith team
{
System.out.print(" "+sPlayers[i][j]+"\t ");
}//end for loop
System.out.println("\n----------------------------------------------------------------------------------------------------\n");
}//end for loop
sPlayers = new String[numTeams][];, как только вы знаете, сколько команд; затемsPlayers[i] = new String[sNumPlayers];(как вы уже делаете), когда у вас есть количество игроков для команды #i.