Есть ли способ создать массив в Java с некоторыми инициализированными числами, а затем добавить к нему случайные числа - PullRequest
1 голос
/ 20 июня 2019

Я пытаюсь создать массив из 7 чисел, которые вводятся вручную, и 43 случайных чисел.

Я могу сделать это в C, но я сталкиваюсь с проблемой в Java 7 чисел, которые вручнуюinput выводится в виде нулей при печати массива

int arr3[]= {1,2,3,4,5,6,7}; // this is where I created the array 
arr3=new int[50];

// здесь я попытался заполнить его

for (int i = 7; i < arr5.length; i++) 
{
arr3[i] = (int) (Math.random() * 1500);
} 

Я хотел бы, чтобы первые несколько чисел были введены вручнуюа остальное будет случайным образом создано

Ответы [ 5 ]

2 голосов
/ 20 июня 2019

Проблема в том, что вы создаете новый пустой массив, который заменяет первый.

 int arr3[]= {1,2,3,4,5,6,7}; // new int[7]; populated with the values
 arr3 = new int[50]; // new, empty, array and replacing the first

Я рекомендую использовать System.arraycopy для копирования значений в ваш массив:

public static void main(String[] args) {

    // create the array
    int[] array = new int[50];

    // copy initial values into the array
    int[] values = {1,2,3,4,5,6,7};
    System.arraycopy(values, 0, array, 0, values.length);

    // populate random values
    for (int i = values.length; i < array.length; i++) {
        array[i] = (int) (Math.random() * 1500);
    }

    // print the array
    System.out.println(Arrays.toString(array));
}
2 голосов
/ 20 июня 2019

Это утверждение:

arr3 = new int[50];

повторно объявляет arr3, что означает, что все, что было инициализировано arr3, отбрасывается, и поэтому вы видите значение по умолчанию int (0).

Вы можете решить эту проблему, скопировав input в больший массив:

int[] arr3 = new int[50];
int[] input = { 1, 2, 3, 4, 5, 6, 7 };

for (int i = 0; i < input.length; i++) {
    arr3[i] = input[i];
}

for (int i = input.length; i < arr3.length; i++) {
    arr3[i] = (int) (Math.random() * 1500);
}
2 голосов
/ 20 июня 2019

Это потому, что вы делаете arr3=new int[50];, вы сбрасываете каждое значение в списке на 0 и устанавливаете размер массива на 50. Здесь int arr3[]= {1,2,3,4,5,6,7}; вы устанавливаете размер на 7. Что вы могли бы сделать, например, так:

int arr3[]= new int[50];
arr3[0] = 1;
arr3[1] = 2;
arr3[2] = 3;
arr3[3] = 4;
arr3[4] = 5;
arr3[5] = 6;
arr3[6] = 7;

for (int i = 7; i < arr3.length; i++) {
    arr3[i] = (int) (Math.random() * 1500);
}
0 голосов
/ 20 июня 2019

Все остальные ответы ответили на ваш вопрос напрямую (и хорошо), поэтому я хотел бы предложить другой подход вместо этого.

Похоже, вам не нужна конкретная длина массива (непосредственно не используется во втором цикле), поэтому может оказаться проще использовать List, а затем по окончании преобразовать его в массив.

List<Integer> list = new ArrayList<>();
for(int i=1; i<=7; i++) {
    list.add(i);
}

for (int i = 7; i < arr5.length; i++) {
    list.add((int) (Math.random() * 1500));
}

int[] arr3 = list.toArray(new int[list.size()]);
0 голосов
/ 20 июня 2019

Вы почти правильно поняли.Что вы должны сделать, это -

int arr3[] = new int[50]; //creating a new array
int arr3[] = {1,2,3,4,5,6,7};

То, что вы делали неправильно, было то, что вы создавали массив arr3 размером 7, а затем воссоздали его с размером 50, так что в памятикогда вы создаете новый массив размером 50, предыдущее значение заменяется на 0, так как в java каждый элемент массива по умолчанию инициализируется с помощью 0.

Теперь вы можете легко его заполнить.Также я бы рекомендовал использовать класс Java.util.Random для генерации случайных чисел.Подробнее об этом можно прочитать здесь .

...