Как сделать 2d-массив динамическим

Я пытаюсь сделать двумерный массив полудинамическим. Таким образом, он не использует списки массивов и не является полностью динамическим, где пользователь может добавлять или удалять элементы, но программа должна иметь возможность запрашивать у пользователя количество команд, а затем запрашивать имя каждой команды и количество игроков в команде и наконец, имя каждого игрока в каждой команде. Ниже то, что я сделал до сих пор. Код работает, но не выводит команды и игроков. Пожалуйста, помогите как можно скорее :)


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
sPlayers = new String[numTeams][];, как только вы знаете, сколько команд; затем sPlayers[i] = new String[sNumPlayers]; (как вы уже делаете), когда у вас есть количество игроков для команды # i.
Kevin Anderson 15.09.2018 02:51
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
1
26
1

Ответы 1

Первая ошибка:

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

Другие вопросы по теме