如何在另一个方法中使用一个方法的variables?

我想知道如何使用方法Scores()的variablesa[i][j]在以下代码中的方法MD()sumD()中使用它:

在我的代码中,方法MD()sumD()不能得到结果。

 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 ; 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(); } } 

提前致谢。

你不能。 在方法中定义的variables对于该方法是本地的。

如果要在方法之间共享variables,则需要将它们指定为类的成员variables。 或者,您可以将它们从一个方法传递给另一个方法(这不总是适用的)。

看起来你正在使用实例方法而不是静态方法。

如果你不想创build一个对象,你应该声明所有的方法是静态的,所以类似

 private static void methodName(Argument args...) 

如果你希望所有这些方法都可以访问一个variables,你应该在方法之外初始化它,并限制它的作用域,并声明它是私有的。

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

全局variables通常是被低估的(特别是对于像你这样的情况),因为在一个大规模的程序中可能会造成严重破坏,所以把它变成私有的,至less可以防止一些问题。

另外,我会说通常:你应该尽量保持你的代码有点整齐。 使用描述性的类,方法和variables名,并保持你的代码整齐(具有适当的缩进,换行符等)并保持一致。

下面是你的代码应该是什么样子的最后(缩写)例子:

 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. } } 

理想情况下,因为你正在使用一个数组,所以你可以在main方法中创build数组并将其作为parameter passing给每个方法,但是解释这个方法可能是一个全新的问题,所以我将把它留在那。

只需移动a的声明,使其成为Test3类的私有属性,如下所示:

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

只需将[i] [j]作为类variables,在Scores()之外声明它,就在类名的下面

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

你可以声明一个二维数组指针作为类的成员。 然后在成员函数中声明大小和值。 在这种情况下,您可以从另一个function访问它

请参阅此代码中T [] []的使用

  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); } } 

传递一个参数或者创build一个类var

如果你想能够使用2dmatrix,你需要在你的方法之外声明它。

 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]); } } } ....... 

你会看到我已经把函数之外的一个(之前在Scores()内部的声明,以及我已经注释过的)声明移出了,现在它是类Test3的一个字段。 当你在一个函数中声明一个variables的时候,这个函数是本地的。 它不能被其他函数等看到。如果你声明它是一个类字段,你的函数可以看到它。 看看这个,因为它可能有帮助。 Language / VariableScope.htm“> http://www.java2s.com/Tutorial/Java/0020_Language/VariableScope.htm术语”范围“只是指variables的生命周期以及可以看到的地方。希望这有帮助!;

 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(); } }