Atribuição do teclado

10 respostas
Ronald_lima
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ções

package Calculadora;


public class Operacoes
{
    protected int numero1;
    protected int numero2;
    protected int tipoOper;
    
    public void setNumero1(int numero1)
    {
        this.numero1 = numero1;
    }
    public void setNumero2(int numero2)
    {
        this.numero2 = numero2;
    }
    public int getNumero1()
    {
        return numero1;
    }
    public int getNumero2()
    {
        return numero2;
    }
    public void setTipoOper(int tipoOper)
    {
        this.tipoOper = tipoOper;
    }
    public int getTipoOper()
    {
        return tipoOper;
    }
}



/Classe Soma

package Calculadora;

public class Soma extends Operacoes
{
    public void Somar()
    {
        float resul = (super.getNumero1() + super.getNumero2());
        System.out.println(resul + "\n");
    }

}



/Classe Teste
package Calculadora;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Teste
{
    public static void main(String argggg[]) throws IOException
    {
        Operacoes op = new Operacoes();
        Soma s = new Soma();
        BufferedReader b = new BufferedReader(new InputStreamReader(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())
        {
            case 1:
                s.Somar();
                break;
           case 5:
                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

10 Respostas

ViniGodoy

Ué, vc está fazendo os sets no objeto op, mas está tentando obter a soma do objeto s.

Seu main deveria ser:

/Classe Teste
package Calculadora;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Teste
{
    public static void main(String argggg[]) throws IOException
    {
        Soma op = new Soma();
        BufferedReader b = new BufferedReader(new InputStreamReader(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())
        {
            case 1:
                op.Somar();
                break;
           case 5:
                System.exit(0);
                break;
           default:
                System.out.print("Voce não inseriu nenhum dos itens de escolha");
                break;

        }
    }
}

Se quisesse usar polimorfismo, veja o exemplo da Wikipedia (que por sinal eu escrevi):
http://pt.wikipedia.org/wiki/Polimorfismo

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

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

os atributos sao protected da classe operador/??? pq??? se protected só é acessado dentro da classe e suas subclasses quando é extendida!

P

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

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:
package calculadora;

public class Operacoes {

        // metodo para somar.....
	public float soma(int a, int b){
		return (a + b);
	}
	
//metodo subtrair e por diante....
	public float subtracao(int a, int b){
		
		return (a - b); 
	}
	public float multiplica(int a, int b ){
		return (a * b);
	}
	
	public float divide(int a, int b){
		return(a /b); 
	}
	
	
}
classe Main ou principal
public class Main {

	public static void main(String[] args) throws IOException {
		Scanner s = new Scanner(System.in);  
       	
       System.out.println("Digite um Numero........:");  
		 int a = (Integer)s.nextInt();
		System.out.println("Digite outro Numero....:"); 
		 int b = (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"); 
		int opcao = (Integer)s.nextInt(); 
		 
		Operacoes op = new Operacoes();
		switch (opcao) {
		case 1:
			System.out.println(op.soma(a, b));
			break;
		case 2:
			op.subtracao(a, b);
			break;
		case 3:
			op.multiplica(a, b);
			break;
		case 4:
			op.divide(a, b);
			break;
		case 5:
			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:
package calculadora;

public class Operacoes {

        // metodo para somar.....
	public float soma(int a, int b){
		return (a + b);
	}
	
//metodo subtrair e por diante....
	public float subtracao(int a, int b){
		
		return (a - b); 
	}
	public float multiplica(int a, int b ){
		return (a * b);
	}
	
	public float divide(int a, int b){
		return(a /b); 
	}
	
	
}
classe Main ou principal
public class Main {

	public static void main(String[] args) throws IOException {
		Scanner s = new Scanner(System.in);  
       	
       System.out.println("Digite um Numero........:");  
		 int a = (Integer)s.nextInt();
		System.out.println("Digite outro Numero....:"); 
		 int b = (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"); 
		int opcao = (Integer)s.nextInt(); 
		 
		Operacoes op = new Operacoes();
		switch (opcao) {
		case 1:
			System.out.println(op.soma(a, b));
			break;
		case 2:
			op.subtracao(a, b);
			break;
		case 3:
			op.multiplica(a, b);
			break;
		case 4:
			op.divide(a, b);
			break;
		case 5:
			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...

Criado 24 de setembro de 2010
Ultima resposta 24 de set. de 2010
Respostas 10
Participantes 3