Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在另一个方法中使用一个方法的变量?_Java_Methods_Multidimensional Array - Fatal编程技术网

Java 如何在另一个方法中使用一个方法的变量?

Java 如何在另一个方法中使用一个方法的变量?,java,methods,multidimensional-array,Java,Methods,Multidimensional Array,我想知道如何在方法Scores()中使用变量a[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

我想知道如何在方法
Scores()
中使用变量
a[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();

 }  
}
公共类Test3{
公共无效分数(){
double[]a=新的double[3][5];
int i,j;

对于(i=0;i您不能。方法中定义的变量是该方法的局部变量


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

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

public class Test3 {

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

只需将[i][j]作为类变量,在
Scores()
之外的类名下方声明它

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

传入一个参数或生成一个类var

如果希望能够使用2d矩阵a,则需要在方法之外声明它

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]);
          }   
       }   
    }
    .......
公共类Test3{
double[]a=新的double[3][5];
公共无效分数(){
//double[]a=新的double[3][5];
int i,j;

for(i=0;i看起来您使用的是实例方法而不是静态方法

如果不想创建对象,则应将所有方法声明为静态,例如

private static void methodName(Argument args...)
如果希望所有这些方法都可以访问变量,则应在方法之外对其进行初始化,并将其声明为private以限制其范围

private static int[][] array = new int[3][5];
全局变量通常被轻视(特别是在像您这样的情况下),因为在大型程序中,它们会造成严重破坏,所以将其私有化至少可以防止一些问题

另外,我要说的是:你应该尽量保持你的代码整洁。使用描述性的类、方法和变量名,保持你的代码整洁(适当的缩进、换行等)和一致

下面是最后一个(缩短的)代码示例:

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方法中创建数组,并将其作为参数传递给每个方法,但是解释它是如何工作的可能是一个全新的问题,所以我就不谈了。

公共类Test3{
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();

 }  
}
double[]a=新的double[3][5]; 公共无效分数(){ int i,j;
对于(i=0;i,您可以将二维数组指针声明为类的成员。然后在成员函数中声明大小和值。在这种情况下,您可以从另一个函数中访问它

请参阅此代码中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);
    } 
}
公共类背包{
//专用静态扫描仪;
int T[][];
整数最大值(整数wt[],整数val[],整数总计){
int l=总数;
int m=val.length;
T=新整数[m+1][l+1];
对于(int i=0;i0){
而(T[i][j]==T[i-1][j]){
我--;
}
}
系统输出打印(wt[i-1]+“”);
j=j-wt[i-1];
我--;
}
}
//带有测试用例的主要功能::
公共静态void main(字符串参数[]){
int wt[]={1,3,4,5};
int val[]={1,4,5,7};
背包K=新背包();
System.out.print(“输入总值:”);
//in=新扫描仪(System.in);
//int total=in.nextInt();
int result=K.MaximumVal(wt,val,7);//通过总数
System.out.println(“总值为”+结果);
K.打印路径(wt,val);
} 
}

public class Test3{private double[]a=new double[3][5];注意:如果执行此操作并从方法“public static void main(String args)”测试代码,则需要通过执行“Test3 instance=new Test3()”来创建该类的实例。然后使用“instance.Scores()”调用该方法。
  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();
    }

}