Olá, estou finalizando um programa porém não sei o que colocar no erro das matrizes dos casos 3 e 4. Ocorre o erro do título.
publicclassJogador{intcodigo;Stringnome;Stringposicao;//Sets e Gets já fiz também só irá ficar muito longo...publicclassTime{intcodigoTime;StringnomeTime;Stringtecnico;Jogadorjogadores[];//Sets e Gets...publicclassMenuInterativo{publicstaticvoidmain(Stringargs[]){Stringformato="%-25s %35s %20s\n";Scannerscanner=newScanner(System.in);while(true){System.out.println("Bem vindo ao Meu Esporte virtual!");System.out.println(" Escolha uma das opções para continuar:");System.out.println("1- Para cadastro de novo jogador.");System.out.println("2- Para cadastro de novo time.");System.out.println("3- Para listar jogadores cadastrados.");System.out.println("4- Para listar nomes de times cadastrados.");System.out.println("5- Para listar dados completos de um time.");System.out.println("6- Para vincular um jogador a um time.");System.out.println("7- Sair.");intx=scanner.nextInt();switch(x){case1:String[][]matriz=newString[20][3];System.out.println("Digite a quantidade de jogadores a cadastrar: ");inta=scanner.nextInt();Jogadorjogadores[]=newJogador[a];System.out.println("Digite os dados do jogador: ");for(inti=0;i<jogadores.length;i++){jogadores[i]=newJogador();System.out.println("Jogador "+(i+1));matriz[i][0]=scanner.nextLine();System.out.println("Digite o nome do jogador: ");matriz[i][1]=scanner.nextLine();System.out.println("Digite sua posição: ");matriz[i][2]=scanner.nextLine();}break;case2:String[][]matrizTime=newString[20][3];System.out.println("Digite a quantidade de times a cadastrar: ");intb=scanner.nextInt();Timetimes[]=newTime[b];System.out.println("Digite os dados do time: ");for(inti=0;i<times.length;i++){times[i]=newTime();System.out.println("Time "+(i+1));matrizTime[i][0]=scanner.nextLine();System.out.println("Digite o nome do time: ");matrizTime[i][1]=scanner.nextLine();System.out.println("Digite o nome do técnico: ");matrizTime[i][2]=scanner.nextLine();}break;case3:System.out.printf(formato,"Codigo jogador","Nome","Posição");for(inti=0;i<20;i++)System.out.format(formato,matriz[i][0],matriz[i][1],matriz[i][2]);// aqui a primeira matriz apresenta: variable matriz might not have been initialized.System.out.println();break;case4:System.out.printf(formato,"Codigo Time","Nome Time","Técnico");for(inti=0;i<20;i++)System.out.format(formato,matrizTime[i][0],matrizTime[i][1],matrizTime[i][2]);// aqui a primeira matrizTime apresenta: variable matriz might not have been initialized.System.out.println();break;case5://Ainda estou terminandobreak;case6://Ainda estou terminando mas se quiser dar uma luz agradeço.break;case7:System.out.println("Saindo...");System.exit(0);break;}}
Olha! No case 1: você criou e inicializou a matriz: String[][] matriz = new String[20][3];
E tentou usar no case 3. Aqui está o problema pois no caso 3 a matriz ainda não foi criarda e inicializada!
A saída é você criar essa matriz antes, de preferência antes do loop já que você vai usar ela em outros casos. O mesmo com a matrizTime:
Como você escreveu, porém o programa pediu pra mim dar valor nulo no inicio assim tira o erro. posso deixa-lo assim?
...String[][]matriz=null;String[][]matrizTime=null;while(true){...case3:if(matriz==null){System.out.println("Ops! Essa matriz não foi criada");}else{System.out.printf(formato,"Codigo jogador","Nome","Posição");for(inti=0;i<20;i++)System.out.format(formato,matriz[i][0],matriz[i][1],matriz[i][2]);System.out.println();}break;case4:if(matrizTime==null){System.out.println("Ops! Essa matriz não foi criada");//ououtracoisa}else{System.out.printf(formato,"Codigo Time","Nome Time","Técnico");for(inti=0;i<20;i++)System.out.format(formato,matrizTime[i][0],matrizTime[i][1],matrizTime[i][2]);System.out.println();}break;
J
Jelson1
Sim! Faz sentindo já que a matriz só vai ser inicializada no caso 1 e não a garantias de que ele vai ser executado já que existes outras opções então você tem que inicializar a mesma como null. Ainda tem algum erro?
A
Alekafer
Erros não agora está certinho, só tenho dúvida nos dois últimos métodos que tenho que criar podes me ajudar já que está nessa jornada? ha ha
J
Jelson1
Olha! vendo seu código agora, notei algumas coisas estranhas. Você criou uma matriz de string, matrizTime, para guardar as informações como nome, nome do tecnico, etc. Sendo que você tinha criado uma classe Time, justamente com essa propriedades. Então você tinha quer ter criado uma matriz de Time!
Você vai ter que fazer umas pequenas alterações, que vai ajudar a criar os casos 5 e 6! Vou tidar um exemplo e você faz as outras alterações, certo? Acredito que seu código vai ficar menor e mais simples!
J
Jelson1
Você vai começa trocando matrizTime:
Time[]matrizTimes=null;// no lugar de String[][] matrizTimes//while(true){[...]case2:System.out.println(" digite a quantidades de time:");intb=scanner.nextInt();matrizTimes=newTime[b];System.out.println("Digite os dados:");for(inti=0;i<matrizTimes.length;i++){system.out.println("Time "+(i-1));Timetime=newTime();time.setCodigoTime(i);// aqui eu botei o valor de i você pode pegar a entrada do usuáriosystem.out.println("Digite o nome do time:");Stringnome=scanner.nextLine();system.out.println("Tecnico:");Stringtecnico=scanner.nextLine();time.setNomeTime(nome);time.setNomeTecnico(tecnico);// aqui eu adiciona o Time a matrizmatrizTmatriz[i]=time;}break;}}
Eu tô usando os método getter e setter que você criou, então verifique se eu chamei o nome correto!
Eu estou digitando pelo celular por isso demorei
Mas queria ti perguntar porque não usou esses métodos antes e porque da matriz String[][], existe algum motivo? Você não acha que assim fica melhor?
J
Jelson1
Se a classe time tiver um construtor você pode fazer assim:
Isso é apenas uma sugestão se você achar que vale apena fazer as modificações! Você faz!
A
Alekafer
Bom… Estou iniciando em java eu era da manutenção e agora quero programar… Mas creio que não só a minha faculdade mas a grande maioria torna este mundo muito confuso e a internet não colabora em todos os casos de dúvidas. Então assisto vídeo aulas e tento juntar tudo, porém está bem complicado a falta de explicação. Agradeço por ter tirado seu tempo e me ajudar.
J
Jelson1
Isso é apenas um projetos para treinar? Ou é um trabalho?
J
Jelson1
Bom se você está iniciando, então talvez seja confuso esse lance de classe, construtor e você pode acabar se complicando ao tentar fazer as mundaça que te falei! Se for apenas um projetos pessoal, vale apena você tentar dá uma pesquisada sobre isso! Eu tidaria um exemplo melhor, mas como eu tô pelo celular fica um pouco complicado!
Mas se quiser dá uma estudada em orientação a objeto em Java tem essa apostila Aqui
Bom, eu me lembro do dia que eu achava complicado, quando eu deveria colocar as { } e ; , mas hoje com a prática isso se tornou uma coisa simples para mim. Eu ainda tenho muito para aprender, percebo isso quando entro no GUJ. Mas acredito que com a pratica eu chego lá e o lance da faculdade eu sei como é!
Boa sorte! Espero que eu não tenha te complicado com a minha tentativa de explicação!!!
J
Jelson1
Bom eu não sei se você já conseguiu! mas segue um exemplo:
Sua classe Time deve ser algo assim.
importjava.util.ArrayList;importjava.util.Scanner;publicclassTime{privateintcodigo;privateStringnome;privateStringtecnico;// Eu tô usando uma Lista em vez de Array[]privateArrayList<Jogador>jogadores;//ConstrutorpublicTime(intcodigo,Stringnome,Stringtecnico){this.codigo=codigo;this.nome=nome;this.tecnico=tecnico;jogadores=newArrayList<>();//crio a lista;}//retorna a lista de jogadores desse timepublicArrayList<Jogador>getJogadores(){returnthis.jogadores;}// No item 6 uso esse metodo para vincular um jogador ao time!publicvincularJogador(Jogadorjogador){this.jogadores.add(jogador);// jogador adicionado a lista de jogadores desse time;}publicintgetCodigo(){returnthis.codigo;}publicStringgetNome(){returnthis.nome;}publicStringgetTecnico(){returnthis.tecnico;}publicsetCodigo(intcodigo){this.codigo=codigo;}publicsetNome(Stringnome){this.codigo=nome;}publicsetTecnico(Stringtecnico){this.tecnico=tecnico;}}
sua classe principal:
//[...]//ListasãomaisfaceisparaadicionarnovoselementosdoqueArray[]ArrayList<Time>listaTime=newArrayLista<>();ArrayList<Jogador>listaJogador=newArrayLista<>();while(true){//restosdoseucodigocase1:system.out.println("Digite a quantidade de Jogadores:");inttotal=scanner.nextInt();scanner.nextLine();system.out.println("Digite os Dados:");for(inti=0;i<total;i++){system.out.println("Jogador "+(i+1));intcodigo=i;//EutousandocomoocodigoovalordeiStringnome;Stringposicao;//pegoasentradasdousuariosystem.out.println("Digite o nome:");nome=scanner.nextLine();system.out.println("Digite a posicao:");posicao=scanner.nextLine();//crioojogadoreadicionoalistadejogadoreslistaJogador.add(newJogador(codigo,nome,posicao));}break;case2:system.out.println("Digite a quantidade de times:");inttotal=scanner.nextInt();system.out.println("Digite os Dados:");for(inti=0;i<total;i++){system.out.println("Time "+(i+1));intcodigo=i;//EutousandocomoocodigoovalordeiStringnome;Stringtecnico;//pegoasentradasdousuariosystem.out.println("Digite o nome:");nome=scanner.nextLine();system.out.println("Digite o nome do Tecnico:");tecnico=scanner.nextLine();//criootimeeadicionoalistadetimeslistaTime.add(newTime(codigo,nome,tecnico));}break;////restodoseucodigo////Noseumenu:"4 - Para lista nomes de times cadastrados"case4:system.out.println("Times cadastrados:");for(inti=0;i<listaTime.size();i++){//pegootimedalistaTimemeuTime=listaTime.get(i);//pegoonomeemostronoconsolesystem.out.println(meuTime.getNome());}break;////restodoseucodigo////noseuMenu:"vincular um jogador a um time"//acreditoquesejaassim!case6:system.out.println("---------------Jogadores:--------------");//listotodososjogadoresparavincula!for(inti=0;i<listaJogador.size();i++){Jogadorjogador=listaJogador.get(i);//pegoonomeeoindiceemostronoconsolesystem.out.println("indice: "+i+" nome: "+jogador.getNome());}system.out.println("---------------Times:--------------");//todosostimesdisponiveis:for(inti=0;i<listaTime.size();i++){Timetime=listaTime.get(i);system.out.println("indice: "+i+" nome: "+time.getNome());}system.out.println("Digite o indice do jogado e do time para vincular:");scanner.nextLine();intidJogador=scanner.nextInt();intidTime=scanner.nextInt();Timetime=listaTime.get(idTime);Jogadorj=lista.get(idJogador);//addojogadoraotime;time.vincularJogador(j);break;}/*OBS: verifique se eu digitei o nome e os atributos das classe corretamente * como está no seu código! * * Você também deve criar os métodos sets e gets para a classe jogador com as suas * propriedades: código, nome e posição e o construtor.*/
A
Alekafer1 like
É um trabalho, mas os exemplos é como ensinar 2 + 2 e pedir para o aluno resolver uma equação de 2º.
Eu entendi super bem sobre classes, getters e setters, porém só não entendo como chamar as vezes em outras classes, assim como vetores e matrizes.
Obrigada, me ajudou pra c******. Desculpe a demora para responder… Estava no trabalho.