Olá pessoal do GuJ sou iniciante em java e gostaria de tirar essa dúvida, esse algoritmo como vocês veem preenche dois vetores um de strings e outro de double
eu tentei fazer o preenchimento dos dois ao mesmo tempo, mas não deu certo no for interno do do while, por que quando entrar no for para preencher o vetor
de notas, ele não sai para o laço externo fica querendo preencher o vetor de notas todo. Tentei usar o break começou bem mas quando a condição do laço é atendida
ele para o algoritmo. Gostaria de saber como faço para esse for interno preencher um índice do vetor e voltar para o laço externo?
importjavax.swing.JOptionPane;publicclassVetorDeStringsENotas{publicstaticvoidmain(String[]args){Stringnumero=JOptionPane.showInputDialog("Digite o número ");intnum=Integer.parseInt(numero);String[]nomes=newString[num];double[]notas=newdouble[num];Stringfim="FIM";inti=0;do{Stringnome=JOptionPane.showInputDialog("Digite o nome do aluno para o posicao "+i+" do vetor");nomes[i]=nome;for(intcontador=0;contador<=notas.length;contador++){Stringno=JOptionPane.showInputDialog("Digite a nota do aluno "+nomes[i]);doublenota=Double.parseDouble(no);notas[contador]=nota;//como fazer um vez e voltar pra o do while?}i++;}while(i<=nomes.length);StringpesNome=JOptionPane.showInputDialog("Digite o nome do aluno para receber a nota");for(intindice=0;indice<=nomes.length;indice++){for(intj=0;j<=notas.length;j++){intposicao=pesNome.indexOf(indice);if(pesNome==nomes[indice]&&posicao==notas[j]){JOptionPane.showMessageDialog(null,pesNome+" "+notas[j]);}else{JOptionPane.showMessageDialog(null,"Aluno não encontrado");}}}}}
Eu acho legal colocar os códigos expostos dentro das tag de codigo:
importjavax.swing.JOptionPane;publicclassVetorDeStringsENotas{publicstaticvoidmain(String[]args){Stringnumero=JOptionPane.showInputDialog("Digite o número ");intnum=Integer.parseInt(numero);String[]nomes=newString[num];double[]notas=newdouble[num];Stringfim="FIM";inti=0;do{Stringnome=JOptionPane.showInputDialog("Digite o nome do aluno para o posicao "+i+" do vetor");nomes[i]=nome;for(intcontador=0;contador<=notas.length;contador++){Stringno=JOptionPane.showInputDialog("Digite a nota do aluno "+nomes[i]);doublenota=Double.parseDouble(no);notas[contador]=nota;//como fazer um vez e voltar pra o do while? }i++;}while(i<=nomes.length);StringpesNome=JOptionPane.showInputDialog("Digite o nome do aluno para receber a nota");for(intindice=0;indice<=nomes.length;indice++){for(intj=0;j<=notas.length;j++){intposicao=pesNome.indexOf(indice);if(pesNome==nomes[indice]&&posicao==notas[j]){JOptionPane.showMessageDialog(null,pesNome+" "+notas[j]);}else{JOptionPane.showMessageDialog(null,"Aluno não encontrado");}}}}}
Amigo, refaça essa sua lógica do FOR, você está complicando algo tão simples utilizando essa misturança de variável, e outra você está
esta colocand nomes na posição [i] sendo que o incremento (i++) está fora do FOR!
Eder_Peixoto
Olá Flávio,
Você está tentando fazer uma gambiarra pra resolver outra gambiarra. Primeiramente, siga as dicas anteriores do pessoal, e já aproveito pra dar outras:
Idente (aquele negócio de ir escrevendo o que está dentro de um bloco mais à direita) seu código, pois identação não é frescura, e ajuda que você e outras pessoas entendam melhor o código;
O do ([/b]do{}while();[b]) serve pra tarefas a serem realizadas antes de entrar no loop. No teu caso, não há tratamento especial que necessite desse recurso;
Quando se tratar de objetos (excluídos tipos primitivos), normalmente o uso do operador == não é o que se quer. Geralmente é usado o método equals(Object). Veja no teu código o seguinte trecho:
if(pesNome==nomes[indice]&&posicao==notas[j]){
Sei que no início já queremos sair usando componentes visuais, pois são bonitos e legais. Mas tenha em mente que o mais importante nesse momento é amadurecer o desenvolvimento da estrutura lógica da sua solução.
DaniloAndrade
publicstaticvoidmain(String[]args){Stringnumero=JOptionPane.showInputDialog("Digite o número ");intnum=Integer.parseInt(numero);String[]nomes=newString[num];double[]notas=newdouble[num];for(intcontador=0;contador<num;contador++){Stringnome=JOptionPane.showInputDialog("Digite o nome do aluno para o posicao "+contador+" do vetor");nomes[contador]=nome;Stringno=JOptionPane.showInputDialog("Digite a nota do aluno "+nomes[contador]);doublenota=Double.parseDouble(no);notas[contador]=nota;}StringpesNome=JOptionPane.showInputDialog("Digite o nome do aluno para receber a nota");for(intindice=0;indice<=nomes.length;indice++){if(pesNome.equals(nomes[indice])){JOptionPane.showMessageDialog(null,pesNome+" "+notas[indice]);break;}if(indice==nomes.length){JOptionPane.showMessageDialog(null,"Aluno não encontrado");}}}
assim acho que fica melhor
FlavioA
Muito obrigado amigos pela colaboração de cada um de vocês, é muito bom pra nós iniciantes contar com vocês. Abraço e até a próxima.
bruno.prestes
Bom amigo, eu também sou iniciante em java estou estudando pela apostila da caelum e analisei o seu código e efetuei as seguintes modificações, verifique se é isso que o exercicio pede...
importjavax.swing.JOptionPane;publicclassVetorDeStringsENotas{publicstaticvoidmain(String[]args){Stringnumero=JOptionPane.showInputDialog("Digite o número ");intnum=Integer.parseInt(numero);String[]nomes=newString[num];double[]notas=newdouble[num];Stringfim="FIM";inti=0;do{Stringnome=JOptionPane.showInputDialog("Digite o nome do aluno para o posicao "+i+" do vetor");nomes[i]=nome;for(intcontador=0;contador<notas.length;contador++){Stringno=JOptionPane.showInputDialog("Digite a nota do aluno "+nomes[i]);doublenota=Double.parseDouble(no);notas[contador]=nota;break;//como fazer um vez e voltar pra o do while? }i++;}while(i<nomes.length);StringpesNome=JOptionPane.showInputDialog("Digite o nome do aluno para receber a nota");for(intindice=0;indice<=nomes.length;indice++){for(intj=0;j<=notas.length;j++){intposicao=pesNome.indexOf(indice);if(pesNome==nomes[indice]&&posicao==notas[j]){JOptionPane.showMessageDialog(null,pesNome+" "+notas[j]);}else{JOptionPane.showMessageDialog(null,"Aluno não encontrado");}}}}}
bruno.prestes
opssss.... faltou umas alterações nas comparações dos laços que percorrem os vetores abaixo vai a modificação...
importjavax.swing.JOptionPane;publicclassVetorDeStringsENotas{publicstaticvoidmain(String[]args){Stringnumero=JOptionPane.showInputDialog("Digite o número ");intnum=Integer.parseInt(numero);String[]nomes=newString[num];double[]notas=newdouble[num];Stringfim="FIM";inti=0;do{Stringnome=JOptionPane.showInputDialog("Digite o nome do aluno para o posicao "+i+" do vetor");nomes[i]=nome;for(intcontador=0;contador<notas.length;contador++){Stringno=JOptionPane.showInputDialog("Digite a nota do aluno "+nomes[i]);doublenota=Double.parseDouble(no);notas[contador]=nota;break;//como fazer um vez e voltar pra o do while? }i++;}while(i<nomes.length);StringpesNome=JOptionPane.showInputDialog("Digite o nome do aluno para receber a nota");for(intindice=0;indice<nomes.length;indice++){for(intj=0;j<notas.length;j++){intposicao=pesNome.indexOf(indice);if(pesNome==nomes[indice]&&posicao==notas[j]){JOptionPane.showMessageDialog(null,pesNome+" "+notas[j]);}else{JOptionPane.showMessageDialog(null,"Aluno não encontrado");}}}}}