2013-12-24 4 views
3

Это мой код:Объявление int [] Массив без определения размера?

int[] primes = new int[25]; 

    for (int i = 2; i <= 100; i++) 
    { 
     for (int j = i; j > 0; j--) 
     { 
      int prime = i%j; 
      if (prime == 0) 
      { 
       if ((j == i) || (j == 1)) 
       { 
        isPrime = true; 
       } 
       else 
       { 
        isPrime = false; 
        break; 
       } 
      } 
     } 

     if (isPrime == true){ 
      primes[index] = i; 
      index++; 
     } 
    } 

Как вы можете видеть, я пишу простые числа в массиве. Я подсчитал все простые числа, которые находятся в диапазоне 2-100, поэтому я установил размер массива на 25.

Но скажем, что я не знаю, что 25 простых чисел. Есть ли способ создать массив (любой тип массива) без определения размера? Я пробовал:

int[] primes = new int[0]; 

Но он разбился.

+0

массив имеет фиксированный размер по определению. Используйте список, если вам нужно его расширить. – njzk2

+0

int [0] - пустой массив, поэтому, конечно, он сработает. – Eran

ответ

11

Вы можете использовать List для неизвестного размера информации (возможно, ArrayList будет лучшим решением для вас).

+0

Более конкретно, ArrayList имеет сходное поведение с массивом, но растет по мере необходимости. –

0

List s наилучшим образом подходит для ситуаций, когда вы не знаете точный размер массива. Например, вы можете использовать ArrayList.

0

Вы должны использовать List вместо массива.

Компилятор должен знать размер массива. Когда вы определяете такой массив. int [] primes = new int [0];

Он создает пространство только для 1 целого. Итак, когда вы пишете на простые числа [1], он создает сигнал сбоя сегментации, и ваша программа выходит из строя.

1

No; размер массива должен быть объявлен заранее. Попробуйте взглянуть на различные реализации List или Vector.

Если вам в конце концов понадобится массив, вы можете создать массив из вашего List.

0

Как упоминалось другими, вы можете использовать ArrayList, и если вам все еще нужен вывод в виде массива, вы можете преобразовать ArrayList в массив в конце (как только вы узнаете размер массива).

0

Массивы предназначены для ситуации, когда мы знаем о размере и количестве элементов, которые мы собираемся ввести внутри. Если мы не уверены в размере, тогда в этом случае API Collection Collection может помочь вам. , например

Список интерфейс, реализованный ArrayList и Vector

ArrayList может расширяет его размер на 50% во время выполнения, так это решить problem.Or вы еще можете использовать вектор, если ваше приложение дело с резьбой safety.but избежать используя Vector, потому что он увеличивает свой размер до удвоения во время выполнения.

0

Этот код может вам помочь.

public static void main(String[] args) { 

    boolean isPrime; 
    List<Integer> list = new ArrayList<Integer>(); 

    for (int i = 2; i <= 100; i++) 
    { 
     isPrime = true; 
     for (int j = 2; j < i/2; j++) 
     { 
      int prime = i % j; 
      if (prime == 0) 
      { 
       isPrime = false; 
       break; 
      } 
     } 

     if (isPrime == true){ 
      list.add(i); 
     } 
    } 

    // all the prime numbers 
    for(Iterator<Integer> iterator = list.iterator(); iterator.hasNext();){ 
     System.out.print(iterator.next()+" "); 
    } 

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