Como usar uma variável de um método em outro método?

Eu quero saber como posso usar a variável a[i][j] no método Scolors() para usá-lo nos methods MD() e sumD() no código a seguir:

No meu código, os methods MD() e sumD() não podem obter o resultado.

 public class Test3 { public void Scolors() { double[][] a= new double[3][5]; int i,j; for(i=0; i<3; i++ ){ for(j=0; j<5; j++){ a[i][j]= (double) Math.random(); System.out.println("a[" + i + "][" + j + "] = " +a[i][j]); } } } public void MD(){ double[][] b =new double[3][5]; int [] m = new int[5]; int i,j; //double[][] a= new double[3][5]; for(j= 0; j<5; j++) for(i=0 ; i0.0) m[j]++; } for(j= 0; j<5; j++){ for(i=0 ; i 0.0){ b[i][j]=a[i][j]*m[j]; System.out.println("b[" + i + "][" + j + "] = " + b[i][j]); } } } } public void sumD(){ int i,j,n; double[] sum= new double[3]; double[] k= new double[3]; //double[][] a= new double[3][5]; for(i=0; i<3; i++){ n=0; sum[i]=0.0; for(j=0; j0.0){ sum[i] += (a[i][j])*2; n++; } } k[i]=sum[i]/n; System.out.println("k[" + i + "] = " + k[i]); } } public static void main(String[] args){ Test3 print= new Test3(); print.Scolors(); print.MD(); print.sumD(); } } 

Desde já, obrigado.

Você não pode. Variáveis ​​definidas dentro de um método são locais para esse método.

Se você quiser compartilhar variables ​​entre os methods, precisará especificá-los como variables ​​de membro da class. Alternativamente, você pode passá-los de um método para outro como argumentos (isso nem sempre é aplicável).

Parece que você está usando methods de instância em vez de estáticos.

Se você não quer criar um object, você deve declarar todos os seus methods estáticos, então algo como

 private static void methodName(Argument args...) 

Se você quiser que uma variável seja acessível por todos esses methods, você deve inicializá-la fora dos methods e limitar seu escopo, declarando-a como privada.

 private static int[][] array = new int[3][5]; 

As variables ​​globais geralmente são menosprezadas (especialmente em situações como a sua) porque, em um programa de larga escala, elas podem causar estragos, portanto, torná-la privada evitará alguns problemas, pelo menos.

Além disso, vou dizer o habitual: você deve tentar manter seu código um pouco arrumado. Use descritivo class, método e nomes de variables ​​e manter seu código puro (com recuo adequado, quebra de linha, etc.) e consistente.

Aqui está um exemplo final (abreviado) de como seu código deve ser:

 public class Test3 { //Use this array in your methods private static int[][] scolors = new int[3][5]; /* Rather than just "Scolors" name it so people know what * to expect */ private static void createScolors() { //Code... } //Other methods... /* Since you're now using static methods, you don't * have to initialise an object and call its methods. */ public static void main(String[] args){ createScolors(); MD(); //Don't know what these do sumD(); //so I'll leave them. } } 

Idealmente, como você está usando uma matriz, você criaria a matriz no método principal e a passaria como um argumento em cada método, mas explicar como isso funciona provavelmente é uma questão completamente nova por si só, então deixarei isso em aquele.

Apenas mova a declaração de a para torná-la uma propriedade privada da class Test3 , assim:

 public class Test3 { private double[][] a; public void Scolors() { a= new double[3][5]; int i,j; ...etc... 

apenas faça um [i] [j] como variável de class, declare-o fora dos Scolors() , logo abaixo do nome da class

 public class Test3 { double[][] a= new double[3][5]; public void Scolors() { .... } ..... } 

você pode declarar um ponteiro de matriz de 2-d como um membro da class. Em seguida, declare o tamanho e o valor dentro de uma function-membro. Neste caso, você pode acessá-lo de outra function.

Veja o uso de T [] [] neste código

  public class Knapsack { //private static Scanner in; int T[][]; int MaximumVal(int wt[],int val[], int total){ int l=total; int m=val.length; T = new int[m+1][l+1]; for (int i=0; i<=m; i++){ for(int j=0; j<=l; j++){ if(i==0 || j==0){ T[i][j]=0; continue; } if(j-wt[i-1] >= 0){ T[i][j]=Math.max(T[i-1][j], val[i-1]+T[i-1][j-wt[i-1]]); } else{ T[i][j]=T[i-1][j]; } } } return T[m][l]; } void PrintPath(int wt[], int val[]){ int i=T.length-1; int j=T[0].length-1; while(j!=0){ if(i>0){ while(T[i][j]==T[i-1][j]){ i--; } } System.out.print(wt[i-1]+" "); j=j-wt[i-1]; i--; } } //Main Function with test case :: public static void main(String args[]){ int wt[]={1,3,4,5}; int val[]={1,4,5,7}; Knapsack K = new Knapsack(); System.out.print("Enter the total value: "); //in = new Scanner(System.in); //int total = in.nextInt(); int result = K.MaximumVal(wt,val,7); // pass total System.out.println("Total value is "+ result); K.PrintPath(wt,val); } } 

Passar em um argumento ou fazer uma class var

Se você quiser usar a matriz 2d, você precisa declará-la fora dos seus methods.

 public class Test3 { double[][] a= new double[3][5]; public void Scolors() { //double[][] a= new double[3][5]; int i,j; for(i=0; i<3; i++ ){ for(j=0; j<5; j++){ a[i][j]= (double) Math.random(); System.out.println("a[" + i + "][" + j + "] = " +a[i][j]); } } } ....... 

Você verá que movi a declaração de um (anteriormente dentro de Scolors () e que comentei) fora da function e agora é um campo da class Test3. Quando você declara uma variável dentro de uma function, ela é local para essa function. Ele não pode ser visto por outras funções, etc. Se você o declarar como um campo de class, suas funções poderão vê-lo. Dê uma olhada nisso, pois isso pode ajudar. Language / VariableScope.htm "> http://www.java2s.com/Tutorial/Java/0020_Language/VariableScope.htm O termo" escopo "refere-se apenas ao tempo de vida de uma variável e onde ela pode ser vista.

 public class Test3 { double[][] a=new double[3][5]; public void Scolors() { int i,j; for(i=0; i<3; i++ ){ for(j=0; j<5; j++){ a[i][j]= (double) Math.random(); System.out.println("a[" + i + "][" + j + "] = " +a[i][j]); } } } public void MD(){ double[][] b =new double[3][5]; int [] m = new int[5]; int i,j; //double[][] a= new double[3][5]; for(j= 0; j<5; j++) for(i=0 ; i<3 ; i++) { b[i][j]=0.0; if(a[i][j]>0.0) m[j]++; } for(j= 0; j<5; j++){ for(i=0 ; i<3 ; i++) { if(a[i][j] > 0.0){ b[i][j]=a[i][j]*m[j]; System.out.println("b[" + i + "][" + j + "] = " + b[i][j]); } } } } public void sumD(){ int i,j,n; double[] sum= new double[3]; double[] k= new double[3]; //double[][] a= new double[3][5]; for(i=0; i<3; i++){ n=0; sum[i]=0.0; for(j=0; j<5; j++){ if(a[i][j]>0.0){ sum[i] += (a[i][j])*2; n++; } } k[i]=sum[i]/n; System.out.println("k[" + i + "] = " + k[i]); } } public static void main(String[] args){ Test3 print= new Test3(); print.Scolors(); print.MD(); print.sumD(); } } 
  public class Practise { String a; public String getA() { return a; } public void setA(String a) { this.a = a; } void meth1(){ this.setA("asd"); System.out.println(a); } void meth2(){ String b="qwerty"; System.out.println(getA()+" "+b); } public static void main(String[] args) { Practise p= new Practise(); p.meth1(); p.meth2(); } }