我有两个程序。我创建了一个静态数组和一些方法,如下所示:
public Someclass{
static int counter[] = new int[n];
//methods & main
}
n定义为某个数字,所以我知道它会有一些长度。我后来填充这个数组,我测试看到它被正确填充,所以我知道一些索引应该有除0以外的值。现在当我尝试在第二个程序中调用它时,虽然我从未填充它因为它只给出我0' s。
//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的值,即使我知道计数器数组应该具有非零值。我认为这与我静态初始化它的事实有关,但我在本地方法和类中填充它。所以从技术上来说,它永远不会让它的零更新。我无法解决这个问题,如果有人能提供帮助,我会非常感激。
谢谢
答案 0 :(得分:2)
我的猜测:您正在填充SomeClass中的数组,但在其他类中使用该数组之前从不调用该填充代码。解决方案:务必先填写。有关更具体的帮助,请向我们显示有关代码的更多详细信息。
其他要点 - 通常最好避免使用静态字段,而通常最好将数组设为实例字段。然后你可以通过它的包含类来确定它的状态,并通过包含类来改变它的状态,你有任何限制,你想要改变它。
答案 1 :(得分:0)
如果第二个节目&#39;它实际上是一个单独的程序,而不仅仅是另一个类,它不会按照你想要的方式工作。当第二个程序调用静态类时,它只会为第二个程序创建一个新数组,而第一个程序中填充的原始数组将持续存在于第一个程序中。静态变量只能由同一程序的其他部分访问,而不是计算机上运行的所有程序。
答案 2 :(得分:0)
问题在于:nums[i] = nums[i] + (25 * SomeClass.counter[i]);
基本上你已经创建了一个数组并且没有填充它。
所以如果n = 5
那么counter == {0,0,0,0,0}
。
这意味着每个索引都会得到0
的默认值,所以每次执行此操作时:
25 * SomeClass.counter[i]
乘以0
,当然会返回0
答案 3 :(得分:0)
在Someclass2.main()
中没有任何事情会导致Someclass
中的静态数组被填充。它全是零,因为这就是Java spec defines it:
每个类变量,实例变量或数组组件在创建时都使用默认值进行初始化(§15.9,§15.10)[...]对于int类型,默认值为零,即0。
第二个程序永远不会修改Someclass.counter
的状态,从而导致全部为零。