как сделать 2d массив динамическим - PullRequest
0 голосов
/ 15 сентября 2018

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


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

1 Ответ

0 голосов
/ 15 сентября 2018

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...