首頁>Program>source

我想知道如何使用變數 a[i][j] 在方法 Scores()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();
 }  
}

預先感谢。

最新回復
  • 6月前
    1 #

    您不能.在方法內部定義的變數是该方法的區域性變數。

    如果要在方法之間共享變數,則需要將它们指定為類的成員變數.另外,您也可以將它们从一種方法作為引數傳遞给另一種方法(這並不总是適用)。

  • 6月前
    2 #

    看起来像您在使用例項方法而不是靜態方法。

    如果您不想建立物件,則應將所有方法宣告為靜態,因此類似

    private static void methodName(Argument args...)
    

    如果希望所有這些方法都可以訪問變數,則應在方法之外對其进行初始化,並限製其範圍,將其宣告為私有。

    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方法中建立该陣列,並將其作為引數傳遞给每个方法,但是解釋它的工作方式可能是一个全新的問题,所以我將

  • 6月前
    3 #

    只要移動 a的宣告即可 使它成為 Test3類的私有财产 ,就像這樣:

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

  • 6月前
    4 #

    只需將a [i] [j]設為類變數,並在 Scores()外部进行宣告 ,就在班級名稱的下方

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

  • 6月前
    5 #

    ,您可以將二維陣列指標宣告為该類的成員.然後在成員函式中宣告大小和值.在這種情况下,您可以通過另一个功能来訪問它。

    請參见此代碼中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);
        } 
    }
    

  • android:多屏分辨率
  • 在MySQL中返迴每个" group by"的" last"行