簡體   English   中英

從另一個類調用靜態數組

[英]calling static array from another class

我有兩個程序。 我創建一個靜態數組和一些方法,例如:

public Someclass{
    static int counter[] = new int[n];

    //methods & main

}

n被定義為某個數字,所以我知道它會有一些長度。 稍后我填充此數組,並測試以確保其正確填充,因此我知道某些索引應具有非0的值。現在,當我嘗試在第二個程序中調用它時,盡管我從未填充它,因為它只給出我0的。

  //second program 
  public Someclass2{

      public static main(String[] args){
         String n = "someword"
         int[] nums = new int[n.length]
         for( int i = 0; i < n.length; i++){
            nums[i] = nums[i] + (25 * SomeClass.counter[i]); 
          }
      }

 }

出於某種原因,即使我知道計數器數組應具有非零值,當我在第二個程序中調用該數組時,它也會返回全零並且不更改nums的值。 我認為這與以下事實有關:我靜態地對其進行了初始化,但我將其填充在本地方法和類中。 因此,從技術上講,它永遠不會更新零。 我在嘗試解決此問題時遇到了麻煩,如果有人可以提供幫助,我將不勝感激。

謝謝

我的猜測:您正在將數組填充到SomeClass內部,但是在另一個類中使用該數組之前,請不要調用該填充代碼。 解決方案:確保先填充它。 要獲得更具體的幫助,請向我們顯示有關您的代碼的更多詳細信息。

其他要點-通常最好避免使用靜態字段,而通常最好使數組成為實例字段。 然后,您可以通過其包含的類來確定其狀態,還可以通過包含類對其進行更改的任何限制來通過其包含的類來更改其狀態。

如果第二個“程序”實際上是一個單獨的程序,而不僅僅是另一個類,那么它將無法按您希望的方式工作。 當第二個程序調用靜態類時,它只會為第二個程序創建一個新數組,而您在第一個程序中填寫的原始數組將保留給第一個程序。 靜態變量只能由同一程序的其他部分訪問,而不能在計算機上運行的所有程序訪問。

問題出在這里: nums[i] = nums[i] + (25 * SomeClass.counter[i]);

基本上,您已經創建了一個數組,但尚未填充它。
因此,如果n = 5counter == {0,0,0,0,0}

這意味着每個索引的默認值均為0因此每次執行此操作:
25 * SomeClass.counter[i]您乘以0 ,這當然會返回0

Someclass2.main()中沒有任何事情會導致Someclass的靜態數組被填充。 都是零,因為這是Java規范定義的方式

每個類變量,實例變量或數組組件在創建時都會用默認值初始化(第15.9節,第15.10節)。對於int類型,默認值為零,即0。

第二個程序從不執行任何操作來修改Someclass.counter的狀態,從而導致全零。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM