Olá pessoal, sou novo no fórum, ainda naum postei nenhum tópico, pórém estou com dificuldade em descobrir qual o erro em:
//Classe OperaçõespackageCalculadora;publicclassOperacoes{protectedintnumero1;protectedintnumero2;protectedinttipoOper;publicvoidsetNumero1(intnumero1){this.numero1=numero1;}publicvoidsetNumero2(intnumero2){this.numero2=numero2;}publicintgetNumero1(){returnnumero1;}publicintgetNumero2(){returnnumero2;}publicvoidsetTipoOper(inttipoOper){this.tipoOper=tipoOper;}publicintgetTipoOper(){returntipoOper;}}/ClasseSomapackageCalculadora;publicclassSomaextendsOperacoes{publicvoidSomar(){floatresul=(super.getNumero1()+super.getNumero2());System.out.println(resul+"\n");}}/ClasseTestepackageCalculadora;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;publicclassTeste{publicstaticvoidmain(Stringargggg[])throwsIOException{Operacoesop=newOperacoes();Somas=newSoma();BufferedReaderb=newBufferedReader(newInputStreamReader(System.in));System.out.println("Insira o primeiro valor :");op.setNumero1(Integer.parseInt(b.readLine()));System.out.println("Insira o segundo valor :");op.setNumero2(Integer.parseInt(b.readLine()));System.out.println("Selecione a operação: 1 = Soma, 2 = Subtraçaõ, 3 = Divisão, 4 = Multiplicação , 5 = Sair\n");op.setTipoOper(Integer.parseInt(b.readLine()));switch(op.getTipoOper()){case1:s.Somar();break;case5:System.exit(0);break;default:System.out.print("Voce não inseriu nenhum dos itens de escolha");break;}}}
Ele imprime na tela sempre zero no resultado!!!Sei que ele não esta atribuindo Os valores recebidos de teclado para o lugar certo que seria a superclasse...
mas porque???
se alguem puder me ajudar!!
grato
Ué, vc está fazendo os sets no objeto op, mas está tentando obter a soma do objeto s.
Seu main deveria ser:
/ClasseTestepackageCalculadora;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;publicclassTeste{publicstaticvoidmain(Stringargggg[])throwsIOException{Somaop=newSoma();BufferedReaderb=newBufferedReader(newInputStreamReader(System.in));System.out.println("Insira o primeiro valor :");op.setNumero1(Integer.parseInt(b.readLine()));System.out.println("Insira o segundo valor :");op.setNumero2(Integer.parseInt(b.readLine()));System.out.println("Selecione a operação: 1 = Soma, 2 = Subtraçaõ, 3 = Divisão, 4 = Multiplicação , 5 = Sair\n");op.setTipoOper(Integer.parseInt(b.readLine()));switch(op.getTipoOper()){case1:op.Somar();break;case5:System.exit(0);break;default:System.out.print("Voce não inseriu nenhum dos itens de escolha");break;}}}
Mas não entendi, voce criou um objeto de soma, mas os getters e setters estão na classe operações, e mesmo assim eles receberam!!??Por que???
Poderia me explicar
grato mais uma vez
Ronald_lima
Eu não havia terminado o codigo, tinha apenas feito a classe de soma, mas agora fiz a de subtração divisao e multiplicaçaõ, mas com aquele codigo á atribuido apenas para soma, e subtração e o restante continua com o mesmo problema de antes…
teria alguma forma de resolver esse problema???
grato mais uma vez
P
paulo.rogeriobr
os atributos sao protected da classe operador/??? pq??? se protected só é acessado dentro da classe e suas subclasses quando é extendida!
P
paulo.rogeriobr
poderia fazer um loop pra melhor esse codigo na hora de passar os valores ! ficaria mais pratico e facil entendimento ! sem muita poluição de codigo!
uma IDEIA!!! vlw!!!
Ronald_lima
Eu pus protected para que não sejam vistos de fora do pacote, pq estao todos no mesmi pacote, mas acho q naum eh isso q nao esta deixando funcionar certo???
como que poderia ser feito esse loop com while, for???
de q forma…
obrigado a todos vs pela atençao
ViniGodoy
Ronald_lima:
OPa funcionou…hehe…
Mas não entendi, voce criou um objeto de soma, mas os getters e setters estão na classe operações, e mesmo assim eles receberam!!??Por que???
Poderia me explicar
grato mais uma vez
Por causa da herança. Como a Soma extends Operacoes, soma terá todos os métodos e atributos que operações tem.
Ronald_lima
ViniGodoy:
Ronald_lima:
OPa funcionou…hehe…
Mas não entendi, voce criou um objeto de soma, mas os getters e setters estão na classe operações, e mesmo assim eles receberam!!??Por que???
Poderia me explicar
grato mais uma vez
Por causa da herança. Como a Soma extends Operacoes, soma terá todos os métodos e atributos que operações tem.
Obrigado…foi esclarecedor, vi seu artigo postado sobre polimorfismo…muito bacana tbm…vlw a ajuda
P
paulo.rogeriobr
Tomei a liberdade de implementar um codigo diferente e peço que vc melhore a a formatação para o que vc deseja:
Classe Operacoes:
packagecalculadora;publicclassOperacoes{// metodo para somar.....publicfloatsoma(inta,intb){return(a+b);}//metodo subtrair e por diante....publicfloatsubtracao(inta,intb){return(a-b);}publicfloatmultiplica(inta,intb){return(a*b);}publicfloatdivide(inta,intb){return(a/b);}}
classe Main ou principal
publicclassMain{publicstaticvoidmain(String[]args)throwsIOException{Scanners=newScanner(System.in);System.out.println("Digite um Numero........:");inta=(Integer)s.nextInt();System.out.println("Digite outro Numero....:");intb=(Integer)s.nextInt();System.out.println("\tSelecione a operação:\t\n1 = Soma,\t\n 2 = Subtração,\t\n 3 = Multiplicação,\t\n 4 = Divisão,\t\n 5 = Sair\n");intopcao=(Integer)s.nextInt();Operacoesop=newOperacoes();switch(opcao){case1:System.out.println(op.soma(a,b));break;case2:op.subtracao(a,b);break;case3:op.multiplica(a,b);break;case4:op.divide(a,b);break;case5:System.exit(0);break;default:System.out.println("Opção Invalida.............!");break;}}}
Realmente não foi necessário nem de loop de acordo com a logica da calculadora ! Mas se precisasse continuar calculando ai precisaria!
você pode fazer uma melhora com um metodo recursivo! mas ai é contigo !! Espero ter ajudado na sua duvida! Afinal nesse caso não seria necessário o uso de get e set ...............
vlw
Ronald_lima
paulo.rogeriobr:
Tomei a liberdade de implementar um codigo diferente e peço que vc melhore a a formatação para o que vc deseja:
Classe Operacoes:
packagecalculadora;publicclassOperacoes{// metodo para somar.....publicfloatsoma(inta,intb){return(a+b);}//metodo subtrair e por diante....publicfloatsubtracao(inta,intb){return(a-b);}publicfloatmultiplica(inta,intb){return(a*b);}publicfloatdivide(inta,intb){return(a/b);}}
classe Main ou principal
publicclassMain{publicstaticvoidmain(String[]args)throwsIOException{Scanners=newScanner(System.in);System.out.println("Digite um Numero........:");inta=(Integer)s.nextInt();System.out.println("Digite outro Numero....:");intb=(Integer)s.nextInt();System.out.println("\tSelecione a operação:\t\n1 = Soma,\t\n 2 = Subtração,\t\n 3 = Multiplicação,\t\n 4 = Divisão,\t\n 5 = Sair\n");intopcao=(Integer)s.nextInt();Operacoesop=newOperacoes();switch(opcao){case1:System.out.println(op.soma(a,b));break;case2:op.subtracao(a,b);break;case3:op.multiplica(a,b);break;case4:op.divide(a,b);break;case5:System.exit(0);break;default:System.out.println("Opção Invalida.............!");break;}}}
Realmente não foi necessário nem de loop de acordo com a logica da calculadora ! Mas se precisasse continuar calculando ai precisaria!
você pode fazer uma melhora com um metodo recursivo! mas ai é contigo !! Espero ter ajudado na sua duvida! Afinal nesse caso não seria necessário o uso de get e set ...............
vlw
POxa vlw ai rogerio..vc ajudou e muito..obrigadao msm...