Duvida - Iniciante (Variaveis entre classes) [RESOLVIDO]

Fala Pessoas… blz… aqui estou eu com mais uma duvida… eu sei que pode ser bem idiota mas é que como estou comecando eu nao sei… nem tive isso na facu ainda, mas ja to lendo pra tentar adiantar… afinal mts vezes na facu as coisas demoram neh… rsrs…

obs: nao sei se está certo hein… apenas estou fazendo de acordo com o que eu vou lendo em livros e foruns…

eu criei uma classe “Soma” onde armazena 2 variaveis e executa uma conta de soma

public class Soma{
	float $numero0 =0;
	float $numero1 =0;
	float $resultado=0;
	public void somar(){
		$resultado= $numero0  + $numero1;
		System.out.println ("Resultado da soma eh de "+ $resultado);
	}
}

depois criei outra classe “Calculadora” que vai pedir 2 numeros pro user e chamar o somar() para somar neh… claro. rsrs

import java.io.*;

public class Calculadora{
	public static void main (String []args){
		BufferedReader entrada;
		entrada = new BufferedReader (new InputStreamReader(System.in));
		Soma $n1 = new Soma();
		Soma $n2 = new Soma();
		try{
			System.out.println ("Insira o primeiro numero");
			$n1 = Float.parseFloat (entrada.readLine());
			$n1 = Float.parseFloat (entrada.readLine());
			
			}
		catch (Exception e) {
			System.out.println ("Erro de entrada");
		}
	}
}

só que aqui está o problema… primeiro dá erro nessa parte de incompatibilidade…

found : int
required: Soma

e a segunda coisa é como faco pra chamar esse metodo somar()?

Valeu

Acho q vc precisa criar setter pros seus numeros:

public class Soma{   
    float $numero0 =0;   
    float $numero1 =0;   
    float $resultado=0;   
    public void somar(){   
        $resultado= $numero0  + $numero1;   
        System.out.println ("Resultado da soma eh de "+ $resultado);   
    }   

   public set$numero0(float n){
         $numero0 = n;
   }

   public set$numero0(float n){
         $numero1 = n;
   }

}

Depois....

public class Calculadora{   
    public static void main (String []args){   
        BufferedReader entrada;   
        entrada = new BufferedReader (new InputStreamReader(System.in));   
        Soma $n1 = new Soma();   
        //Soma $n2 = new Soma();   nao precisa de Soma()
        try{   
            System.out.println ("Insira o primeiro numero");   
            $n1.set$numero0(Float.parseFloat (entrada.readLine()));   
            $n1.set$numero1(Float.parseFloat (entrada.readLine()));   

            $n1.somar();  
               
            }   
        catch (Exception e) {   
            System.out.println ("Erro de entrada");   
        }   
    }   
}

Testa ai q eu digitei aki mesmo

Seguindo sua lógica, sem melhoramentos no código, ficaria assim:

public class Soma {

	float $numero0 =0;  
    float $numero1 =0;  
    float $resultado=0;  
    
    //É preciso criar um construtor para setar suas variáveis.
    public Soma(float n0, float n1) {
		$numero0 = n0;
		$numero1 = n1;
	}
    
    public void somar(){  
        $resultado= $numero0  + $numero1;  
        System.out.println ("Resultado da soma eh de "+ $resultado);  
    }  
}


public class Calculadora {

	public static void main(String[] args) {
		BufferedReader entrada;  
        entrada = new BufferedReader (new InputStreamReader(System.in));  
        float $n1, $n2;  // As variáveis que irão receber os números devem ser floats.
        try{  
            System.out.println ("Insira o primeiro numero");  
            $n1 = Float.parseFloat (entrada.readLine());  
            $n2 = Float.parseFloat (entrada.readLine());  
            Soma resultado = new Soma($n1, $n2);  //Instanciação do objeto Soma passando as variáveis
            resultado.somar(); // chamando o método somar
            }  
        catch (Exception e) {  
            System.out.println ("Erro de entrada");  
        } 
	}
}

Dá uma olhada depois nas boas práticas de programação, JavaBeans, etc. para melhorar seu código!

Abs.

[code]# Soma $n1 = new Soma();

Soma $n2 = new Soma();

try{

System.out.println (“Insira o primeiro numero”);

$n1 = Float.parseFloat (entrada.readLine());

$n1 = Float.parseFloat (entrada.readLine());

}

catch (Exception e) {

System.out.println (“Erro de entrada”);

} [/code]

assim cara…
tu criou dois objetos Somas, mas nao definiu os valores… pra numero0 e numero1
tenta colocar

Soma $n1 = new Soma();  
#         Soma $n2 = new Soma();  
#         try{  
#             System.out.println ("Insira o primeiro numero");  
#             $n1.numer0 = Float.parseFloat (entrada.readLine());  
#             $n1.numero1 = Float.parseFloat (entrada.readLine());  
#               
#             }  
#         catch (Exception e) {  
#             System.out.println ("Erro de entrada");  
#         }

não entendi porque voce criou dois objetos soma
:smiley:

www.caelum.com.br > entra lá e procura a apostila fj-11 pra baixar, vai por mim

Entendi mais ou menos… rsrs…

nao entendi uma coisa… eu quero inserir o numero qualquer na classe calculadora… mas quero que ela fique salva dentro da classe soma… pra quando eu chamar o metodo somar ele efetuar o calculo… pq eu insiro o numero mas ele salva no n1 e n2 que foi colocado dentro da propria classe calc… é o mesmo que eu ter uma classe usuario e uma inscricao… aí coloco a informacao mas salva dentro da classe usuario… tenderam… será que eu consegui mais ou menos me explicar?

uhahuahua…

vlw

Se eu entendi o que vc quis dizer, quando o objeto soma é instanciado, os números permanecem enquanto vc estiver fazendo qualquer manipulação dentro da própria classe Calculadora. Todas as vezes que vc chamar o método somar() a soma será realizada.

Vc só perderá os números se fizer alguma alteração no objeto Soma.

Abs.

vejo vc tem ki usar os metodos get e set
ai sim e herda a classe soma

alguem poderia me dar um exemplo de como eu usaria o get ?

Deixa eu ver se consigo sanar a sua duvida de vez…

é o seguinte:

Você criou uma classe soma

public class Soma{  
    float $numero0 =0;  
    float $numero1 =0;  
    float $resultado=0;  
    public void somar(){  
        $resultado= $numero0  + $numero1;  
        System.out.println ("Resultado da soma eh de "+ $resultado);  
    }  
}

Dentro desta classe soma você criou três atributos float

float $numero0 =0; para receber um determinado valor
float $numero1 =0; para receber um determinado valor
float $resultado=0; para receber o valor da soma dos dois outros.

E criou um metodo que não retorna nada e só imprime o valor da soma.

public void somar(){  
        $resultado= $numero0  + $numero1;  
        System.out.println ("Resultado da soma eh de "+ $resultado);  
}

Depois você criou uma classe calculadora como a que esta logo abaixo, que teria como função
receber os parametros do teclado e chamar o metodo somar da classe Soma

import java.io.*;  
  
public class Calculadora{  
    public static void main (String []args){  
        BufferedReader entrada;  
        entrada = new BufferedReader (new InputStreamReader(System.in));  
        Soma $n1 = new Soma();  
        Soma $n2 = new Soma();  
        try{  
            System.out.println ("Insira o primeiro numero");  
            $n1 = Float.parseFloat (entrada.readLine());  
            $n1 = Float.parseFloat (entrada.readLine());  
              
            }  
        catch (Exception e) {  
            System.out.println ("Erro de entrada");  
        }  
    }  
}  

Você obteve o erro pelo seguinte:

Soma $n1 = new Soma(); Cria uma referência $n1 a classe Soma e agora $n1 é um objeto soma (na verdade não é um objeto soma, mas uma referência para ele, mas para vc entender veja a referencia $n1 como sendo o objeto).

Soma $n1 = new Soma(); Não é necessario criar neste caso uma segunda referência já que vc pode fazer o que vc quer com apenas uma.

Quando você esta fazendo isso :
$n1 = Float.parseFloat (entrada.readLine());
Você está tentando atribuir a um objeto Soma um float, isso você não pode fazer porque
$n1 só pode receber objetos Soma. Afinal ele é uma referencia a Soma.

Digo que sempre devemos ficar atentos aos tipos.
Float so pode receber float.
int só pode receber int
e um objeto Soma só pode receber um objeto Soma.
É claro que temos o Casting, mas não vou entrar neste detalhe.

O correto seria você tentar acessar o atributo $numero0 da classe Soma.
você acessa o seu atributo através da referência:
usamos o “.” para acessar o atributo dentro da classe Soma.
Então temos
(referência).atributo = valor do teclado

Em codigo:

$n1.$numero0 = Float.parseFloat (entrada.readLine()); 

Isso vai fazer com que o atributo da classe soma $numero0 receba o valor digitado pelo usuario, e vc deve fazer isso para o outro atributo.

$n1.$numero1 = Float.parseFloat (entrada.readLine()); 

O seu erro é conceitual, você esta trabalhando com objetos, então vc deve acessar os atributos de seus objetos através
de suas referências. O que você fez foi tentar programar proceduralmente.

Para acessar o seu metodo, você deve fazer da mesma forma:
$n1.somar();

so que pra isso funcionar vc vai ter que fazer algumas modificações no seu codigo
como as classes são publicas e vc não esta declarando nenhum atributo como private todos estão com o modificador default.
Então vc não precisa de get e set.
Aqui vai o que deve ser feito

A classe Soma()

public class Soma{  
    float $numero0 =0;  
    float $numero1 =0;  
    float $resultado=0;  
    public void somar(){  
        this.$resultado = this.$numero0  + this.$numero1;  
        System.out.println ("Resultado da soma eh de "+ $resultado);  
    }  
}  

A classe Calculadora()


import java.io.*;  
  
public class Calculadora{  
    public static void main (String []args){  
        BufferedReader entrada = new BufferedReader (new InputStreamReader(System.in)); 
        Soma $n1 = new Soma();  
      
        try{  
            System.out.println ("Insira o primeiro numero");  
            $n1.$numero0 = Float.parseFloat (entrada.readLine());  
            System.out.println ("Insira o segundo numero");
            $n1.$numero1 = Float.parseFloat (entrada.readLine()); 
            
            //chamada para o metodo somar
            $n1.somar();   
              
            }  
        catch (Exception e) {  
            System.out.println ("Erro de entrada");  
        }  
    }  
}  

Espero ter ajudado você a entender onde você errou.

Caraca muleke… Hildebrando Pedroni… tu é bom mano… é exatamente isso qe eu tava tentando fazer… será que eu demoro muito pra ficar bom em java… sempre quis ser desenvolvedor… agora sim entendi como fazer… mas vc mencionou que nao havia declarado nada como private e tal… fiquei curioso, mas nao quero ver agora… estou ainda no 1sem da facu e estou vendo agora java… entao tb nao adianta correr muito pra nao me perder tb… mas deixa eu treinar bastante que depois vou ver isso aí… esses get and set… rsrs… abracos a todos… falow!!!

Ficar bom em java ou em qualquer linguagem só depende de você. Estudar sempre e nunca se conformar.
O pessoal falou ai da apostila da caelum. Ela é bem legal para quem está começando.
Nesta apostila vc vai achar informações para os modificadores de acesso private,public,protected e etc, alem de enteder o porque dos geters e seters.
Bons estudos…
Não esqueça de editar o titulo do tópico para [RESOLVIDO] caso esteja satisfeito com as respostas.

Abraços