O problema é q ele faz td certinho… mas não mostra no final! comofas?
DavidUser
por favor coloque os codigos na tag code assim facilita a leitura.
coloque o código por completo com suas variáveis reais dessa forma não podemos encotrar os erros de programação da sua classe nem sugerir melhoras.
tente usar um único while e compare a string recebida na janela:
Stringquant="s"; //necessária atribuição do valor "s" ou "S" para iníciar a gravaçãowhile(quant.equals("s")||quant.equals("S")){//aquipodeadicionaronúmeroquequiserdevaloresaceitosparacontinuaragravaçãoutilizandoo"ou ( | )"//seucodigo...
System.out.println("Sua gravação!"); //exemplo para mostrar como esta sendo gravado o descritoquant=JOptionPane.showInputDialog(null,"tem outro?");
}
DavidUser
Caso ainda não seja o erro, informe o código por completo assim acharei os erros de programação e a solução para seu problema.
Thais1
Já vi o erro, era a forma q eu tava fazendo que tava errado.. mas olha só, agora, eu tenho q mostrar o vendedor de menor salario fixo(com tds os seus dados).. mas tipo,
Vendedor a=interface.pegueVendedor();
[code]Vendedor menorSalario=null;
double menor= que valor eu coloco akii??;
Já vi o erro, era a forma q eu tava fazendo que tava errado.. mas olha só, agora, eu tenho q mostrar o vendedor de menor salario fixo(com tds os seus dados).. mas tipo,
Vendedor a=interface.pegueVendedor();
[code]Vendedor menorSalario=null;
double menor= que valor eu coloco akii??;
while(quant=='s'||quant=='S'){a=inter.pegueVendedor();doublesalFixo=a.informeSalarioFixo();doublecomissao=a.fornecaComissao();doublesalarioTotal=a.informeSalarioTot(comissao);if(salFixo<=menor){menor=salFixo;menorSalario=a;}charsexo=a.informeSexo();if(sexo=='f'||sexo=='F'){mulheres++;salFem+=a.informeSalarioTot(comissao);}inter.mostreFuncionario(a.informeNome(),a.informeSalarioFixo(),comissao,salarioTotal);quant=inter.pecaOutro("Tem outro, (s/n)?");}inter.mostreMenorSalario("O funcionario com menor salario fixo e: ",menorSalario,menorSalario.informeSalarioTot(comissao));if(mulheres==0)inter.mostre("Nao ha funcionarios do sexo feminino");else{doublesalMedioFem=salFem/mulheres;inter.mostre("Osalariomediototaldosfuncionariosdosexofemininoe:"+salMedioFem);}}
}
tá aí…
DavidUser
leia o forum inicial deste, ele te ensina a utilizar os recursos de exibição da mensage:
assim: (abri a tag code e fechei com [b]/code[b])
publicclassPrincipal{publicstaticvoidmain(String[]p){Interfaceinter=newInterface();Vendedora;charquant='s';intmulheres=0;doublesalFem=0.0;VendedormenorSalario=null;doublemenor=1000;while(quant=='s'||quant=='S'){a=inter.pegueVendedor();doublesalFixo=a.informeSalarioFixo();doublecomissao=a.fornecaComissao();doublesalarioTotal=a.informeSalarioTot(comissao);if(salFixo<=menor){menor=salFixo;menorSalario=a;}charsexo=a.informeSexo();if(sexo=='f'||sexo=='F'){mulheres++;salFem+=a.informeSalarioTot(comissao);}inter.mostreFuncionario(a.informeNome(),a.informeSalarioFixo(),comissao,salarioTotal);quant=inter.pecaOutro("Tem outro, (s/n)?");}inter.mostreMenorSalario("O funcionario com menor salario fixo e: ",menorSalario,menorSalario.informeSalarioTot(comissao));if(mulheres==0)inter.mostre("Nao ha funcionarios do sexo feminino");else{doublesalMedioFem=salFem/mulheres;inter.mostre("O salario medio total dos funcionarios do sexo feminino e: "+salMedioFem);}}}
DavidUser
sem querer ofender mais tem de melhor a organização na hora da construção de seus códigos!
Thais1
publicclassPrincipal{publicstaticvoidmain(String[]p){Interfaceinter=newInterface();Vendedora;charquant='s';intmulheres=0;doublesalFem=0.0;VendedormenorSalario=null;doublemenor=1000;while(quant=='s'||quant=='S'){a=inter.pegueVendedor();doublesalFixo=a.informeSalarioFixo();doublecomissao=a.fornecaComissao();doublesalarioTotal=a.informeSalarioTot(comissao);if(salFixo<=menor){menor=salFixo;menorSalario=a;}charsexo=a.informeSexo();if(sexo=='f'||sexo=='F'){mulheres++;salFem+=a.informeSalarioTot(comissao);}inter.mostreFuncionario(a.informeNome(),a.informeSalarioFixo(),comissao,salarioTotal);quant=inter.pecaOutro("Tem outro, (s/n)?");}inter.mostreMenorSalario("O funcionario com menor salario fixo e: ",menorSalario,menorSalario.informeSalarioTot(comissao));if(mulheres==0)inter.mostre("Nao ha funcionarios do sexo feminino");else{doublesalMedioFem=salFem/mulheres;inter.mostre("O salario medio total dos funcionarios do sexo feminino e: "+salMedioFem);}}}
DavidUser
nuss! muito melhor!
Agora sim
DavidUser
Kd a classe Interface?
coloca ai
Thais1
importjavax.swing.JOptionPane;publicclassInterface{publicInterface(){}publiccharpecaOutro(Stringms){charo='m';while(o!='s'&&o!='S'&&o!='n'&&o!='N'){Stringoutro=JOptionPane.showInputDialog(ms);o=outro.charAt(0);if(o!='s'&&o!='S'&&o!='n'&&o!='N')JOptionPane.showMessageDialog(null,"Resposta invalida");}returno;}publicVendedorpegueVendedor(){Stringnome=JOptionPane.showInputDialog("Digite nome do vendedor: ");charsexo='n';while(sexo!='f'&&sexo!='F'&&sexo!='m'&&sexo!='M'){Stringsex=JOptionPane.showInputDialog("Digite sexo (F/M): ");sexo=sex.charAt(0);if(sexo!='f'&&sexo!='F'&&sexo!='m'&&sexo!='M')JOptionPane.showMessageDialog(null,"Valor invalido");}doublesalarioFixo=-1.0;while(salarioFixo<0){Stringsal=JOptionPane.showInputDialog("Digite o salario fixo");salarioFixo=Double.parseDouble(sal);if(salarioFixo<0)JOptionPane.showMessageDialog(null,"Valor invalido");}doublevalorDasVendas=-1.0;while(valorDasVendas<0){Stringvendas=JOptionPane.showInputDialog("Digite o valor das vendas do respectivo funcionario: ");valorDasVendas=Double.parseDouble(vendas);if(valorDasVendas<0)JOptionPane.showMessageDialog(null,"Valor invalido");}returnnewVendedor(nome,sexo,salarioFixo,valorDasVendas);}publicvoidmostreFuncionario(Stringname,doublesalarioFix,doublecomiss,doublesalarioTot){JOptionPane.showMessageDialog(null,"Funcionario: "+name+"\n Salario fixo: "+salarioFix+"\n Comissao: "+comiss+"\n Salario Total: "+salarioTot);}publicvoidmostre(Stringmsg){JOptionPane.showMessageDialog(null,msg);}publicvoidmostreMenorSalario(Stringm,VendedormenorSalario,doublesalTot){JOptionPane.showMessageDialog(null,m+menorSalario.informeNome()+"\n Salario fixo: "+menorSalario.informeSalarioFixo()+"\n Comissao: "+menorSalario.fornecaComissao()+"\n Salario total: "+salTot);}}
o valor do double menor teria q ser mt grande, maior do que qualquer valor q o usuario iria colocar para um salario… então eu coloquei tipo… 100000000000000.00
e agora o erro tá dando na linha 42 da Principal =S
DavidUser
que salário é esse q vc ta medindo!
Bill Gates?
Thais1
hehe, é q é o usuário quem vai colocar o salário né… daí sabe-se lá o q ele vai colocar… e tipo, cada valor de vendas ele recebe uma comissão, se for acima de 30 mil, a comissão é de 8,5%… então, botei um valor grande meio que pra garantir q ele não iria colocar um maior… mas meu professor é bem exigente, ele quer a critica dos dados e td mais…
Thais1
Já resolvii :D
é q eu tinha q inicializar as variaveis fora do while..
pra poder usá-las no final..
Mas, mt obrigada mesmo assim :D
DavidUser
não tem erro nenhum!
ta que vc fez tempestade em copo d’agua, pois podia ter feito com 2 classe uma adicionando e outra testando mais não tem erro não
DavidUser
Há é por isso então!
ele estava declarando as variáveis apenas para o primeiro run.
Thais1
Sim, mas acontece que é um trabalho, e como eu dissse, tem q ser da maneira que o professor quer…
por exemplo, no último q a gente entregou, só 2 pessoas da sala vão tirar nota boa, pq era pra fazer uma classe relógio que mudasse as hrs, e a gente ñ levou em conta q o usuário poderia considerar um horário maior que 24h, ou menor que 0… e isso tbm com os minutos e segundos… =S
a gente tá aprendendo de uma forma, então tem q seguir isso, pelo menos na aula dele… =S
DavidUser
Vc tem sim um bom raciocínio mais tente organizar melhor seu código.
Aconselho a criar apenas um Pai e apenas uma classe parente para a função desejada(ler,inoformar,etc…).
Assim vc evita o POG que complica em questão de manutenção do código.
Tente criar os métodos com execução de interfaces de gravação no própio método principal da classe de cadastro, recursos Swing ficam no método principal.(para em casos de bug, saber onde modificar o error sera descrito na saída).
DavidUser
Acho q não é bem isso que ele quis dizer de errado, o errado esta no resultado da ação e não no como é estruturado, no caso do tal relógio se tivessem inserido mais uma função para dias e específicado o código desde segundos até horas e como dito dias; ele teria aceitado pois as funções do tal relógio estavam completas.
Sem critícar os métodos do seu professor pessa para ele informar qual o resultado esperado por ele, é assim que se trabalha na construção de um software o cliente informa o que deseja e você constrói como quiser (de preferência do modo mais leve e volátiu).
Thais1
Sim, a gente perguntou… mas é que na verdade ele tinha dito q a partir da aula q ele ensinou a fazer os metodos de acesso, a critica dos dados… era pra gente colocar em tds os trabalhos isso… só que td mundo esqueceu :S
DavidUser
ha! assim então ele fez o correto!
Todos os seres humanos nascem com especifidades, tente todos os modos e programe do modo que seu cérebro melhor aceita não tente seguir um padrão ou isso diminui sua rendibilidade.
Bons estudos
Thais1
Hey, tem alguma forma de fazera critica dos dados, tipo… se o usuário digitar um número para o nome, informar q o dado está incorreto?
Bons estudos pra vc tbm
DavidUser
claro q sim! O java possui uma infinidade de recursos oferecidos por seus pacotes.
da uma olhada aqui estão todos.(esse é o manual da sun)
DavidUser
tive uma idéia use o try cath
try{//testa condiçãocatch(Exeptione){//se erro, faça...}[code]eufizumexemploassim:[code]Stringx;x="";try{if(Integer.parseInt(x)!=0)System.out.println("valor inteiro");}catch(Exceptione){System.out.println("INCOPATÍVEL");//se ele é uma string não pode ser convertido em um valor inteiro diferente de 0.}if(Integer.parseInt(x)/1!=0)System.out.println("teste");
você pode fazer o mesmo para uma string do modo inverso.
DavidUser
ta ai ele responde se é um inteiro ou uma string:
publicstaticvoidmain(String[]args){Stringx;x="";booleantipo;try{if(Integer.parseInt(x)!=0)System.out.println("Integer");tipo=true;if(x.equals("0"))System.out.println("Integer");}catch(Exceptione){System.out.println("String");tipo=false;}System.out.println(tipo);//se for Inteiro o tipo é true, se String tipo é false}
M
marcobiscaro2112
Justamente o que DavidUser disse. O tratamento de erros e ações inesperadas que ocorrem em um programa Java são chamadas exceções. Veja outro exemplo:
importjava.util.Scanner;publicclassTipos{publicstaticvoidmain(String[]args){Scannerentrada=newScanner(System.in);System.out.print("Digite uma String qualquer: ");Stringvalor=entrada.next();System.out.println("String digitada: "+valor);try{Integer.parseInt(valor);System.out.println("A string digitada é um inteiro válido.");}catch(NumberFormatExceptione){System.out.println("String não reconhecida como inteiro.");}}}
No exemplo, uma exceção é lançada pelo método Integer.parseInt() caso a String não represente um inteiro válido (e consequentemente a frase de erro é apresentada). Se exceção alguma ocorrer, é mostrada a mensagem de sucesso.
E quanto ao caso de nomes e valores que seguem padrões, existe uma coisa em Java chamada regex (Regular Expressions ou Expressões Regulares) que serve para isso. Mas acho que esse assunto já começa a se tornar um pouco complexo. De qualquer forma, ficam aqui alguns links caso você se interesse:
Procure sobre o assunto na seção de artigos do GUJ, pois deve ter algo interessante lá também.
DavidUser
como funciona o regex?
tem como dar um exemplo básico?
M
marcobiscaro2112
Um programa de linha de comando que exige que o usuário digite um código com uma letra maiúscula seguida de três números:
importjava.util.Scanner;importjava.util.regex.Pattern;publicclassUsandoRegex{publicstaticvoidmain(String[]args){Scannerentrada=newScanner(System.in);System.out.print("Digite uma letra maiúscula seguida"+" de três números: ");Stringresultado=entrada.nextLine();// o Pattern é uma letra de A até Z e 3 dígitoswhile(!Pattern.matches("[A-Z]\d{3}",resultado)){System.out.print("Entrada inválida. Tente novamente: ");resultado=entrada.nextLine();}System.out.println("Valor digitado: "+resultado);}}
Esse é um exemplo bem simples, porém funcional. Mas regex é muito mais poderoso do que parece.