2013-06-05 2 views
1

у меня есть массив строк, которые я хочу, чтобы преобразовать в целое, довольно простым и понятным вот код:как я могу инициализировать мой массив, когда я не могу инициализировать как null?

public static void main(String[] args) { 
    String myarray[]=readfile("[pathtothefile]"); 

    int mynums[] = new int[myarray.length]; 
    for (int i=0;i<myarray.length;i++){ 
     mynums[i]=Integer.parseInt(myarray[i]); 
    } 
    System.out.print(Arrays.toString(mynums)); 
} 

Но проблема здесь есть, если я инициализировать «mynums», как это: mynums [ ] = NULL; я получить NullPointerException на следующей строке:

"mynums[i]=Integer.parseInt(myarray[i]);" 

, что я должен сделать, чтобы решить это

int mynums[] = new int[myarray.length]; 

here кто-то объяснил, почему это происходит, но я не знаю, как инициализировать сейчас я имею в виду, иногда я не знаю, как большой мой массив может получить, и я просто хочу его инициализировать. это даже возможно?

+3

Посмотрите на обратный: Почему бы это имело смысл, чтобы определить показатели нулевого массива? – Vulcan

+1

Как вы можете получить доступ к определенному элементу в массиве без инициализации самого массива? – Bernard

+3

Еще один способ подумать о том, что вы заполняете чашку. Если ваша чашка (массив) не существует, как вы могли бы добавить к ней воду (ints)?Во-первых, вы должны иметь окончательную чашку, чтобы добавить к ней воду. – Vulcan

ответ

1

В Java все указатель за кулисами. Поэтому, когда вы делаете mynums [] = null, вы указываете на нуль. Итак, что такое null [i]? Вот откуда берет ваш NPE. Альтернативно, когда вы указываете его на массив, вы фактически получаете доступ к i-му элементу массива.

+0

Спасибо, Так как я могу исправить это, когда я точно не знаю, насколько большой может быть мой начальный массив? – Amir

+0

@ user1972584 Вы можете использовать [Collection in java] (http://docs.oracle.com/javase/tutorial/collections/). искать Список – Smit

+0

Либо это, либо вы должны прочитать свой файл дважды. Однажды, чтобы получить размер и один раз, чтобы заполнить массив. Конечно, список, вероятно, намного лучший выбор (или ArrayList или Vector). Вы также можете выполнить List.ToArray после того, как вы закончите чтение. –

1

Вы должны сначала инициализировать массив, потому что он выделяет память в зависимости от размера массива. Если вы хотите добавить, например, целое число в массив, он записывает int в ранее выделенную память.

Объем памяти не будет расти больше, как вы добавите больше деталей. (Если вы не используете списки или HashMaps, ... но это не верно для общих массивов)

Если вы не знаете, насколько велика ваша массив будет рассмотрен с использованием SparseIntArray. который похож на списки и будет расти по мере добавления элементов.

+0

SparseIntArray доступен только на Android, не является частью JavaSE –

0

Коротко, в java массив - это объект, поэтому вам нужно рассматривать его как объект и инициализировать его перед тем, как делать что-либо с ним.

0

Что делать, если вы не используете массив, а ArrayList? Он динамически растет при добавлении элементов.

0

Вот эта идея. Когда вы инициализируете что-то как null, вы просто заявляете, что оно существует. Например ... если бы я сказал вам, что есть собака, но я ничего не сказал об этом ... Я не сказал вам, где это было, насколько высок, сколько лет, мужчина/женщина и т. Д. Я не сказал вам ни о каких его свойствах, ни о том, как получить к нему доступ, и все, что я сказал вам, это то, что есть собака (чье имя Array, ради аргумента), тогда это все, что вы знаете. Есть собака, чье имя - Массив, и все.

Как правило, массивы используются, когда размер уже известен, и, как правило, данные должны быть неизменными. Для данных, которые должны быть изменены, вы должны использовать такие вещи, как ArrayList. Это предназначенный:; вы можете добавлять/удалять элементы по прихоти. Для получения дополнительной информации о ArrayList, прочитайте вышеприведенные ссылки.

Теперь, как для вашего кода:

public static void main(String[] args) { 

    ArrayList<int> myInts = new ArrayList<int>(); 
     // define a new null arraylist of integers. 

    // I'm going to assume that readfile() is a way for you get the file 
    // into myarray. I'm not quite sure why you would need the [], but I'll 
    // leave it. 

    String myarray[] = readfile("[pathtothefile]"); 

    for (int i = 0; i < myarray.length; i++) { 
      //adds the value you've specifed as an integer to the arraylist. 
     myInts.add(Integer.parseInt(myarray[i])); 
} 

    for (int i = 0; i < myInts.size(); i++) { 
      //print the integers 
     System.out.print(Integer.toString(myInts.get(i))); 
    } 

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