Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.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_Arrays_Class_Static_Global - Fatal编程技术网

Java 从另一个类调用静态数组

Java 从另一个类调用静态数组,java,arrays,class,static,global,Java,Arrays,Class,Static,Global,我有两个节目。我创建了一个静态数组和一些方法,例如: public Someclass{ static int counter[] = new int[n]; //methods & main } n被定义为一个数字,所以我知道它有一定的长度。稍后我填充这个数组,并测试它是否被正确填充,因此我知道一些索引应该具有0以外的值。现在当我试着在第二个程序中调用它时,虽然我从未填充它,因为它只给我0 //second program public Someclas

我有两个节目。我创建了一个静态数组和一些方法,例如:

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

 }
//第二个程序
公共服务类别2{
公共静态main(字符串[]args){
String n=“someword”
int[]nums=新的int[n.length]
for(int i=0;i
出于某种原因,当我在第二个程序中调用数组时,它会返回所有零,并且不会更改nums的值,即使我知道计数器数组应该具有非零值。我认为这与我静态初始化它有关,但我在本地方法和类中填充了它。所以从技术上讲,它永远不会更新它的零。我在试图解决这个问题时遇到了困难,如果有人能帮助我,我会很感激的


谢谢

我的猜测:您正在某个类中填充数组,但在另一个类中使用数组之前,千万不要调用该填充代码。解决方法:一定要先填好。有关更具体的帮助,请向我们展示有关代码的更多详细信息


其他要点——通常最好避免使用静态字段,相反,最好将数组设置为实例字段。然后,您可以通过它的包含类确定它的状态,也可以通过包含类更改它的状态,并对更改它的能力施加任何限制。

如果第二个“程序”实际上是一个单独的程序,而不仅仅是另一个类,那么它将无法按您希望的方式工作。当第二个程序调用静态类时,它将只为第二个程序创建一个新数组,而您在第一个程序中填充的原始数组将保留给第一个程序。静态变量只能由同一程序的其他部分访问,而不是计算机上运行的所有程序。

问题在于:
nums[i]=nums[i]+(25*SomeClass.counter[i])


基本上你已经创建了一个数组,但是没有填充它。
所以如果
n=5
那么
计数器=={0,0,0,0}


这意味着每个索引都会获得默认值
0
,因此每次执行此操作时:
25*SomeClass.counter[i]
乘以
0
,当然返回
0

Someclass2.main()中不会发生任何事情
这将导致填充
Someclass
中的静态数组。它都是零,因为这就是:

每个类变量、实例变量或数组组件在创建时都使用默认值初始化(§15.9、§15.10)[…]对于int类型,默认值为零,即0


第二个程序从不修改
Someclass.counter的状态,结果得到全零。

什么时候调用Someclass中修改计数器数组的本地方法?静态数组初始化为全零。你没有把价值放进去。如果您已经处理了值。在main方法中没有对它的调用。