ftuc Posted April 11, 2012 at 08:09 AM Report #448519 Posted April 11, 2012 at 08:09 AM 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 🙂
Gonka Posted April 11, 2012 at 08:40 AM Report #448522 Posted April 11, 2012 at 08:40 AM 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...
KTachyon Posted April 11, 2012 at 10:35 AM Report #448541 Posted April 11, 2012 at 10:35 AM 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
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now