Usando metodos/objetos - duvida simples

4 respostas
java_up

ola pessoal,

a duvida é simples, mas nao consigo entender uma coisa:

existem 2 classes, uma em cada arquivo. A intençao é praticar o uso de metodo, portanto eu quiz instanciar dois inteiros em uma classe (class Principal) e na outra classe (class Fonte) eu queria usar um metodo ( metodo math) para somar uma unidade em cada inteiro. No final, imprimir os novos valores na classe Principal.

No entanto, esta imprimindo os valores iniciais que instanciei (nun=50 e nan=100) e nao os valores somados +1 (deveria imprimir nun=51 e nan=101)

Porque isso esta acontecendo? Nao deveria entrar na funçao math() que criei?

obrigado

public class Principal{
	
	
	public static void main(String args[]){
		
		Fonte ob = new Fonte();
		Fonte ob2 = new Fonte();
		
		ob.nun= 50;  
		ob.nan= 100;
		
		ob2.math(ob.nan, ob.nun);
		
		System.out.println(ob.nan + "," + ob.nun);
	}
	
}
public class Fonte{
	
	 int nun;
	 int nan;
	 
	 
	 
		public void math(int x, int y){
			
			
			x=x+1;
			y=y+1;
			
			this.nan=y;
			this.nun=x;
						
		}
}

4 Respostas

T

Falta de atenção:

System.out.println(ob.nan + "," + ob.nun);

Deveria ser

System.out.println(ob2.nan + "," + ob2.nun);

Dica: não dê nomes às variáveis que sejam muito parecidos uns com os outros; acaba acontecendo tal coisa que você não estava conseguindo enxergar.

java_up

perfect! Obrigado pela dica thingol, prestarei mais atençao aos detalhes de variaveis.

abraços amigo!

peczenyj

Certo, vc continua expondo os atributos da sua classe, imagino que no futuro vc abandone essa pratica :slight_smile:

Agora, nãio entendo pq o seu metodo ‘math’ não faz isso:

public void math(Fonte f){ this.num =f.num + 1; this.nan =f.nan + 1; }

Isso é util para muitos casos, imagine uma classe que representa um vetor desde a origem até um pont x,y e vc quer somar esta reta com outra:

class Vetor{ public int x, y; public void adiciona(Vetor r){ this.x = r.x; this.y = r.y; } }

java_up

tudo blz peczenyj ?! :slight_smile:

valeu pela analise, ja absorvi a dica! Realmente, se eu for colocar um vetor por exemplo, a lista de parametros poderia ficar imensa!

Sobre o fato de exposição das variáveis, é apenas um teste para eu deixar meu paradigma procedural de lado e abstrair a OO… rapaz, ate eu descobrir que os ponteiros estao escondidos nos objetos, foi complicado de compreender! haha!

Uma rapida pergunta: se no seu exemplo do vetor, eu ao invés de colocar como parametro o objeto da classe (Vector r) e colocasse os inteiros especificos, que supondo daria uns 4 inteiros (int a, int b, int c, int d) para um vetor que tenha 1000 inteiros, qual das duas maneiras eu obteria melhor desempenho?
usando como parametro o objeto da classe que tem uns 1000 inteiros no vetor, ou colocar os inteiros especificos para o metodo?

o codigo com sua sugestao esta embaixo pec, valeu cara!

// just a simple example

public class Principal{
	
	
	public static void main(String args[]){
		
		Fonte ob = new Fonte(); // para variaveis anteriores nun e nan
		Fonte ob2 = new Fonte(); // para variares posteriores nun e nan
		
		ob.nun= 50;
		ob.nan= 100;
		
		ob2.math(ob);
		System.out.println(ob2.nan + "," + ob2.nun);
	}
	
}
public class Fonte{
	
	 int nun;
	 int nan;
	 
	      
	   
	   public void math(Fonte f){
		   this.nan = f.nan +2;
		   this.nun = f.nun +2;
		   	   }
	   
			}
Criado 29 de janeiro de 2009
Ultima resposta 29 de jan. de 2009
Respostas 4
Participantes 3