¿Cómo usar una variable de un método en otro método?

Quiero saber cómo puedo usar la variable a[i][j] en el método Scores() para usarla en los métodos MD() y sumD() en el siguiente código:

En mi código, los métodos MD() y sumD() no pueden obtener el resultado.

 public class Test3 { public void Scores() { 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.Scores(); print.MD(); print.sumD(); } } 

Gracias por adelantado.

No puedes. Las variables definidas dentro de un método son locales para ese método.

Si desea compartir variables entre métodos, deberá especificarlos como variables miembro de la clase. Alternativamente, puede pasarlos de un método a otro como argumentos (esto no siempre es aplicable).

Parece que está utilizando métodos de instancia en lugar de estáticos.

Si no desea crear un objeto, debe declarar todos sus métodos estáticos, por lo que algo así como

 private static void methodName(Argument args...) 

Si desea que todos los métodos tengan acceso a una variable, debe inicializarla fuera de los métodos y limitar su scope, declararlo privado.

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

Las variables globales generalmente son menospreciadas (especialmente para situaciones como la suya) porque en un progtwig a gran escala pueden causar esgulps, por lo que hacerlo privado evitará al menos algunos problemas.

Además, diré lo de siempre: debes tratar de mantener tu código un poco ordenado. Use la clase descriptiva, el método y los nombres de las variables, y mantenga su código ordenado (con sangría adecuada, saltos de línea, etc.) y consistente.

Aquí hay un ejemplo final (abreviado) de cómo debería ser su código:

 public class Test3 { //Use this array in your methods private static int[][] scores = new int[3][5]; /* Rather than just "Scores" name it so people know what * to expect */ private static void createScores() { //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){ createScores(); MD(); //Don't know what these do sumD(); //so I'll leave them. } } 

Idealmente, dado que estás usando una matriz, deberías crear la matriz en el método principal y pasarla como argumento a través de cada método, pero explicar cómo funciona eso probablemente sea una pregunta completamente nueva, así que la dejaré en ese.

Simplemente mueva la statement de a para que sea una propiedad privada de la clase Test3 , así:

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

acaba de hacer una [i] [j] como variable de clase, declararlo fuera de los Scores() , justo debajo del nombre de la clase

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

puede declarar un puntero de matriz 2D como miembro de la clase. Luego declare el tamaño y el valor dentro de una función miembro. En este caso, puede acceder a él desde otra función …

Ver el uso de T [] [] en este 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); } } 

Pase una discusión o haga una clase var

Si desea poder usar la matriz 2d, a, debe declararlo fuera de sus métodos.

 public class Test3 { double[][] a= new double[3][5]; public void Scores() { //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]); } } } ....... 

Verá que he movido la statement de a (anteriormente dentro de Partituras (), y que he comentado) fuera de la función, y ahora es un campo de la clase Test3. Cuando declara una variable dentro de una función, es local para esa función. No puede ser visto por otras funciones, etc. Si lo declaras como un campo de clase, tus funciones pueden verlo. Echa un vistazo a esto, ya que puede ser útil. Language / VariableScope.htm "> http://www.java2s.com/Tutorial/Java/0020_Language/VariableScope.htm El término" scope "simplemente se refiere a la vida útil de una variable y dónde se puede ver. ¡Espero que esto ayude!

 public class Test3 { double[][] a=new double[3][5]; public void Scores() { 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.Scores(); 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(); } }