Jump to content
ftuc

Atribuir valores inteiros a variáveis inteiras dentro do método

Recommended Posts

ftuc

public class TestesRapidos {
Scanner ler=new Scanner(System.in);
    
    public static void main(String[] args) {
     int a = 0;
     int b = 0;
     int c = 0;
int l []=new int[3];
     Teste(a,b,c,l);
        System.out.println(l[0]+l[1]);
    System.out.println(a+b+c);
    }

static void Teste (int a,int b,int c,int [] l){
l[0]=1;
l[1]=2;
a=50;
b=100;
c=900;

}
}

Output

3

0

Não posso atribuir valores inteiros a variáveis inteiras dentro do método? :S

No vetor ele atribui, nas variaveis simples não :S

Alguém me pode explicar ?

Cumps :)

Share this post


Link to post
Share on other sites
Gonka

As variáveis declaradas dentro dos métodos, são apenas dos métodos. Se quisesses verificar o valor delas, terias que fazer o println, dentro do método. Sempre podes retornar os valores que estão dentro do método, mas terias sempre que os atribuir às variáveis do main. Outra solução é usares variáveis globais...

Share this post


Link to post
Share on other sites
KTachyon

A solução é encapsulares as variáveis num objecto. O Java passa os atributos para os métodos by value, o que significa que estares a alterar essas variáveis não afecta as originais. No entanto, se passares as variáveis num objecto, essas variáveis serão uma referência dentro do objecto, que serão modificáveis dentro dos métodos.

class VariaveisEncapsuladas {
   public int a;
   public int b;
   public int c;
   public int[] l;
}

public class TestesRapidos {
Scanner ler=new Scanner(System.in);

public static void main(String[] args) {
	VariaveisEncapsuladas vE = new VariaveisEncapsuladas();
	vE.a = 0;
	vE.b = 0;
	vE.c = 0;
 	vE.l = new int[3];
	Teste(vE);

	System.out.println(vE.l[0] + vE.l[1]);
	System.out.println(vE.a+vE.b+vE.c);
}

static void Teste (VariaveisEncapsuladas v){
	v.l[0]=1;
 	v.l[1]=2;
 	v.a=50;
 	v.b=100;
 	v.c=900;
}
}

Claro que, para que isto siga as boas práticas, não deves utilizar variáveis públicas, mas getters e setters:

class VariaveisEncapsuladas {
   int a;
   int b;
   int c;

   int getA() { return a; }
   int getB() { return b; }
   int getC() { return c; }
   int[] getL() { return l; }

   void setA(int a) { this.a = a; }
   void setB(int b) { this.b = b; }
   void setC(int c) { this.c = c; }
   void setL(int[] l) {
       this.l = new int[l.length];
       for (int i = 0; i < l.length; i++) this.l[i] = l[i];
   }

   void setL(int v, int pos) {
       this.l[pos] = v;
   }
}

public class TestesRapidos {
Scanner ler=new Scanner(System.in);

public static void main(String[] args) {
	VariaveisEncapsuladas vE = new VariaveisEncapsuladas();
	vE.setA(0);
	vE.setB(0);
	vE.setC(0);
 	int l = new int[3];
 	vE.setL(l);

	Teste(vE);

	l = vE.getL();

	System.out.println(l[0] + l[1]);
	System.out.println(vE.getA()+vE.getB()+vE.getC());
}

static void Teste (VariaveisEncapsuladas v){
	vE.setL(1, 0);
	vE.setL(2, 1);
 	v.setA(50);
 	v.setB(100);
 	v.setC(900);
}
}


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.