[Dúvida] não consigo escrever o que quero no JOptionPane
10 respostas
N
noorders
Olá.
Estou a tentar fazer o seguinte programa:
[list]Faça um programa que represente sob a forma de gráficos de barras o número de positivas e negativas
dos alunos (A) a um conjunto de disciplinas (D). O programa deverá possuir um módulo para imprimir
a informação de uma disciplina. O output produzido deverá ter o seguinte aspecto:
Disciplina: Português
- Positivas: ****************
- Negativas: ****
Disciplina: Matemática
- Positivas: ***********
- Negativas: *********[/list]
Mas o problema é que quando o programa me tem que apresentar esse output não aparece como eu queria aí no exemplo.
O meu código é o seguinte:
importjavax.swing.JOptionPane;publicclassPL5ex3{publicstaticvoidmain(String[]args){ex3();}publicstaticvoidex3(){intD=Integer.parseInt(JOptionPane.showInputDialog("Quantas disciplinas serão apresentadas?"));StringnomeDisciplinas[]=newString[D];//array do nome das disciplinasintnotasPositivas[]=newint[D];//array das notas positivas das disciplinasintnotasNegativas[]=newint[D];//array das notas negativas das disciplinasStringimp[]=newString[D];//array para a impressão final//ciclo for() para atribuir o nome a cada disciplinafor(inti=0;i<D;i++){nomeDisciplinas[i]=JOptionPane.showInputDialog("Insira o nome da disciplina "+(i+1));}intA=Integer.parseInt(JOptionPane.showInputDialog("Quantos alunos frequentam as disciplinas?"));//ciclo for() para atribuir o nº de notas positivas e negativas a cada disciplinafor(inti=0;i<nomeDisciplinas.length;i++){notasPositivas[i]=Integer.parseInt(JOptionPane.showInputDialog("Quantas notas positivas foram dadas na disciplina "+nomeDisciplinas[i]));notasNegativas[i]=A-notasPositivas[i];}//ciclo for para chamar o método imprimir para cada disciplina.for(inti=0;i<nomeDisciplinas.length;i++){imp[i]=imprimir(notasPositivas[i],notasNegativas[i]);}//ciclo for para para imprimir as * referentes a cada disciplina.for(inti=0;i<nomeDisciplinas.length;i++){JOptionPane.showMessageDialog(null,"Disciplina: "+nomeDisciplinas[i]+"\n"+imp);}}publicstaticStringimprimir(intpos,intneg){Stringtxtpos="",txtneg="",res="";//acrescentar * nas notas positivasif(pos>0){for(inti=1;i<=pos;i++){txtpos=txtpos+"*";}}//acrescentar * nas notas negativasif(neg>0){for(inti=1;i<=pos;i++){txtneg=txtneg+"*";}}res="- Positivas: "+txtpos+"\n- Negativas: "+txtneg;returnres;}}
Isso vai fazer com que i menssagens sejam exibidas…
Você tá querendo exibir tudo de uma vez no JOptionPane, em tempo de execução…
O que eu faria seria atribuir os valores do vertor para uma unica Variavel
for(int i =0 ; i< nomeDisciplinas.length; i++){
aux.concat(aux.concat(nomeDisciplinas[i]));
}
tendeu?
AndreSorge
Boa Noite noorders
Tente assim…
importjavax.swing.JOptionPane;publicclassHuilg{publicstaticvoidmain(String[]args){ex3();}publicstaticvoidex3(){intD=Integer.parseInt(JOptionPane.showInputDialog("Quantas disciplinas serão apresentadas?"));StringnomeDisciplinas[]=newString[D];//array do nome das disciplinas intnotasPositivas[]=newint[D];//array das notas positivas das disciplinas intnotasNegativas[]=newint[D];//array das notas negativas das disciplinas Stringimp[]=newString[D];//array para a impressão final //ciclo for() para atribuir o nome a cada disciplina for(inti=0;i<D;i++){nomeDisciplinas[i]=JOptionPane.showInputDialog("Insira o nome da disciplina "+(i+1));}intA=Integer.parseInt(JOptionPane.showInputDialog("Quantos alunos frequentam as disciplinas?"));//ciclo for() para atribuir o nº de notas positivas e negativas a cada disciplina for(inti=0;i<nomeDisciplinas.length;i++){notasPositivas[i]=Integer.parseInt(JOptionPane.showInputDialog("Quantas notas positivas foram dadas na disciplina "+nomeDisciplinas[i]));notasNegativas[i]=A-notasPositivas[i];}// //ciclo for para chamar o método imprimir para cada disciplina. // for (int i = 0; i < nomeDisciplinas.length; i++) { // imp [i] = imprimir(notasPositivas[i], notasNegativas[i]); // } //ciclo for para para imprimir as * referentes a cada disciplina. for(inti=0;i<nomeDisciplinas.length;i++){JOptionPane.showMessageDialog(null,"Disciplina: "+nomeDisciplinas[i]+"\n"+imprimir(notasPositivas[i],notasNegativas[i]));}}publicstaticStringimprimir(intpos,intneg){Stringtxtpos="",txtneg="",res="";//acrescentar * nas notas positivas if(pos>0){for(inti=1;i<=pos;i++){txtpos=txtpos+"*";}}//acrescentar * nas notas negativas if(neg>0){for(inti=1;i<=pos;i++){txtneg=txtneg+"*";}}res="- Positivas: "+txtpos+"\n- Negativas: "+txtneg;returnres;}}
o que acontece é que você no for que você monta o array para mostrar, você coloca dentro de um array se você debugar você irá ver que dentro do array você tem o que você precisa, mas como chegar nele? simples, para acessar, você deveria escrever um toString(), mas como o array é uma classe nativa do Java, então nao tem como modificar, por isso você ve um monte de números estranhos, isso é o endereço de memória do objeto manipulado…estão como mudar??? em vez de você colocar dentro de um array, colocamos direto dentro do for que vc irá exibir…entendeu?
espero ter ajudado…
abraços…
LarissaNepomuceno
AndreSorge:
Boa Noite noorders
Tente assim…
importjavax.swing.JOptionPane;publicclassHuilg{publicstaticvoidmain(String[]args){ex3();}publicstaticvoidex3(){intD=Integer.parseInt(JOptionPane.showInputDialog("Quantas disciplinas serão apresentadas?"));StringnomeDisciplinas[]=newString[D];//array do nome das disciplinas intnotasPositivas[]=newint[D];//array das notas positivas das disciplinas intnotasNegativas[]=newint[D];//array das notas negativas das disciplinas Stringimp[]=newString[D];//array para a impressão final //ciclo for() para atribuir o nome a cada disciplina for(inti=0;i<D;i++){nomeDisciplinas[i]=JOptionPane.showInputDialog("Insira o nome da disciplina "+(i+1));}intA=Integer.parseInt(JOptionPane.showInputDialog("Quantos alunos frequentam as disciplinas?"));//ciclo for() para atribuir o nº de notas positivas e negativas a cada disciplina for(inti=0;i<nomeDisciplinas.length;i++){notasPositivas[i]=Integer.parseInt(JOptionPane.showInputDialog("Quantas notas positivas foram dadas na disciplina "+nomeDisciplinas[i]));notasNegativas[i]=A-notasPositivas[i];}// //ciclo for para chamar o método imprimir para cada disciplina. // for (int i = 0; i < nomeDisciplinas.length; i++) { // imp [i] = imprimir(notasPositivas[i], notasNegativas[i]); // } //ciclo for para para imprimir as * referentes a cada disciplina. for(inti=0;i<nomeDisciplinas.length;i++){JOptionPane.showMessageDialog(null,"Disciplina: "+nomeDisciplinas[i]+"\n"+imprimir(notasPositivas[i],notasNegativas[i]));}}publicstaticStringimprimir(intpos,intneg){Stringtxtpos="",txtneg="",res="";//acrescentar * nas notas positivas if(pos>0){for(inti=1;i<=pos;i++){txtpos=txtpos+"*";}}//acrescentar * nas notas negativas if(neg>0){for(inti=1;i<=pos;i++){txtneg=txtneg+"*";}}res="- Positivas: "+txtpos+"\n- Negativas: "+txtneg;returnres;}}
o que acontece é que você no for que você monta o array para mostrar, você coloca dentro de um array se você debugar você irá ver que dentro do array você tem o que você precisa, mas como chegar nele? simples, para acessar, você deveria escrever um toString(), mas como o array é uma classe nativa do Java, então nao tem como modificar, por isso você ve um monte de números estranhos, isso é o endereço de memória do objeto manipulado…estão como mudar??? em vez de você colocar dentro de um array, colocamos direto dentro do for que vc irá exibir…entendeu?
espero ter ajudado…
abraços…
AndreSorge, pelo o que eu entendi, ele quer em uma só saida do JOptionPane todos os valores do vetor.
N
noorders
# for(int i =0 ; i< nomeDisciplinas.length; i++){
aux.concat(aux.concat(nomeDisciplinas[i]));
}
Olá, o que eu queria era uma saída de todos os valores no JOptionPane.
Larissa, nesse ciclo for que me refiriu, de que tipo é que tenho que inicializar a variavel aux.concat?
E depois para me aparecer o outup? É uma instrução do JOptionPane fora dos ciclos for()? Podia escrever a mesma se não fosse pedir muito?
Peço desculpa se disse alguma asneira mas sou noob nisto do java.
AndreSorge, ainda não testei a sua solução, mas amanhã vou testar e posto o resultado, pois aqui no sitio onde vivo já é bem tarde.
Cumprimentos e obrigado
LarissaNepomuceno
noorders, continue perguntando, mesmo que sejam perguntas bobas são perguntas que precisam de respostas
Então
for(int i =0 ; i< nomeDisciplinas.length; i++){
aux.concat(aux.concat(nomeDisciplinas[i]));
}
Esse cara vai simplesmente concatenar o valor do seu vetor[0] com o valor do vetor[1]… assim por diante…
A variavel aux, pode ser inicializada com null, já que o valor dela será mmodificado dentro do for para os vlaores concatenatos do vetor.
AndreSorge o que conta é a intenção, você também não ía adivinhar o que os outros querem .
Larissa, eu optei pela sua solução, aquela em que coloca o ciclo for para chamar o método como comentário e o chama depois no último ciclo for.
Obrigado aos dois.
Abraço
N
noorders
Olá outra vez :)
Eu não queria ser chato, mas disseram-me que neste exercício (para pena minha não podia usar ainda arrays pois isso simplificaria muito este esforço).
Pois bem, eu tentei agora sem arrays e queria que no final o JOptionPane me mostra-se a informação referente a todas as disciplinas.
Eu pensei em aproveitar a ideia do Larissa e usar a variavel aux.concat para ela me ir acrescentando a informação e no depois fazer um output com o resultado final.
Mas o programa na hora só me chega a perguntar informações sobre a primeira disciplina e depois rebenta com os seguintes erros:
[list]run:
Exception in thread "main" java.lang.NullPointerException
at PL5ex3.ex3(PL5ex3.java:20)
at PL5ex3.main(PL5ex3.java:7)
Java Result: 1
BUILD SUCCESSFUL (total time: 10 seconds)[/list]
Aqui vai o código, podem ajudar? Abraço
importjavax.swing.JOptionPane;publicclassPL5ex3{publicstaticvoidmain(String[]args){ex3();}//exercício sem arrayspublicstaticvoidex3(){intD=Integer.parseInt(JOptionPane.showInputDialog("Quantas disciplinas serão apresentadas?"));intA=Integer.parseInt(JOptionPane.showInputDialog("Quantos alunos frequentam as disciplinas?"));intnegativas;Stringaux=null;for(inti=1;i<=D;i++){StringnomeDisciplina=JOptionPane.showInputDialog("Qual o nome da discíplina nº "+i);intpositivas=Integer.parseInt(JOptionPane.showInputDialog("Quantas positivas foram dadas na disciplina "+nomeDisciplina+"?"));negativas=A-positivas;aux.concat(aux.concat(imprimir(positivas,negativas)));}JOptionPane.showMessageDialog(null,"Disciplinas: "+aux);}//método que imprime as *publicstaticStringimprimir(intpos,intneg){Stringtxtpos="",txtneg="",res="";//acrescentar * nas notas positivasif(pos>0){for(inti=1;i<=pos;i++){txtpos=txtpos+"*";}}//acrescentar * nas notas negativasif(neg>0){for(inti=1;i<=neg;i++){txtneg=txtneg+"*";}}res="- Positivas: "+txtpos+"\n- Negativas: "+txtneg;returnres;}}
AndreSorge
Opa acho que eu consegui…
de uma olha…
importjavax.swing.JOptionPane;publicclassPL5ex3{publicstaticvoidmain(String[]args){ex3();}//exercício sem arrays publicstaticvoidex3(){intD=Integer.parseInt(JOptionPane.showInputDialog("Quantas disciplinas serão apresentadas?"));intA=Integer.parseInt(JOptionPane.showInputDialog("Quantos alunos frequentam as disciplinas?"));intnegativas;Stringaux=null;for(inti=1;i<=D;i++){StringnomeDisciplina=JOptionPane.showInputDialog("Qual o nome da discíplina nº "+i);intpositivas=Integer.parseInt(JOptionPane.showInputDialog("Quantas positivas foram dadas na disciplina "+nomeDisciplina+"?"));negativas=A-positivas;if(aux==null){aux=imprimir(positivas,negativas,nomeDisciplina);}else{aux=aux+imprimir(positivas,negativas,nomeDisciplina);}// aux.concat(aux.concat(imprimir(positivas,negativas))); }JOptionPane.showMessageDialog(null,"Disciplinas: \n"+aux);}//método que imprime as * publicstaticStringimprimir(intpos,intneg,Stringdisc){Stringtxtpos="",txtneg="",res;//acrescentar * nas notas positivas if(pos>0){for(inti=1;i<=pos;i++){txtpos=txtpos+"*";}}//acrescentar * nas notas negativas if(neg>0){for(inti=1;i<=neg;i++){txtneg=txtneg+"*";}}res=disc+"\n- Positivas: "+txtpos+"\n- Negativas: "+txtneg+"\n";returnres;}}
Se for isso vc me avisa…ai eu te explico aonde eu modifiquei o cóidigo…