2014-09-14 5 views
1

У меня есть две программы. Я создаю статический массив и некоторые методы, такие как следующие:вызов статического массива из другого класса

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

    //methods & main 

} 

п определяется как некоторое число, так что я знаю, что это будет иметь некоторую длину. Я позже заполняю этот массив, и я тестирую его, чтобы убедиться, что он заполняется правильно, поэтому я знаю, что некоторые индексы должны иметь значения, отличные от 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

Когда вы вызываете локальный метод в своем SomeClass, который модифицирует массив счетчиков? –

+0

статические массивы инициализируются ко всем нулям. Вы не вкладываете в него значения. Если вы обработали значения.В вашем основном методе нет вызова. –

ответ

2

Моей догадки: вы заполняете массив внутри SomeClass, но никогда не звонит, что заполнения кода перед использованием массива в другом классе. Решение: обязательно заполните его первым. Для получения более подробной справки покажите нам более подробную информацию о вашем коде.

Другие пункты - обычно лучше избегать использования статических полей, и вместо этого обычно лучше сделать массив полем экземпляра. Затем вы можете определить его состояние через свой содержащий класс, а также изменить его состояние через содержащий класс с любыми ограничениями, которые вы хотели бы применить, чтобы изменить его.

0

Если вторая «программа» действительно отдельная программа, а не только другой класс, то она не будет работать так, как вы этого хотите. Когда вторая программа вызывает статический класс, она просто создаст новый массив для второй программы, в то время как исходный массив, который вы заполнили в первой программе, сохраняется для первой программы. Статические переменные доступны только для других частей одной и той же программы, а не для всех программ, запущенных на компьютере.

0

Проблема здесь: nums[i] = nums[i] + (25 * SomeClass.counter[i]);

В основном вы создали массив и не заселили ее.
Итак, если n = 5, то counter == {0,0,0,0,0}.

Это означает, что каждый индекс получает значение по умолчанию 0 так каждый раз, когда вы делаете это:
25 * SomeClass.counter[i] вы умножаете с 0, которые, конечно, возвращает 0

0

Там нет ничего, что происходит в Someclass2.main(), что вызовет статический массив в Someclass для быть заполненным. Это все нули, потому что это как Java spec defines it:

Каждая переменная класса, переменная экземпляра, или компонент массива инициализируется значением по умолчанию при его создании (§15.9, §15.10) [...] Для type int, значение по умолчанию равно нулю, то есть 0.

Вторая программа никогда ничего не делает для изменения состояния Someclass.counter, что приводит к получению всех нулей.

Смежные вопросы