Как вставить случайные числа в массив и отсортировать их - PullRequest
0 голосов
/ 30 октября 2019

Мой код должен взять случайное число, сгенерированное случайным методом, и отсортировать их, но он дает мне только одно число.

Моя программа - это генератор случайных чисел, который должен создать 1000 чисел, которые ямогу отсортировать, но мой код вставляет только одно число в массив.

public static void main(String[] args) {
    // write

    int max = 1000;
    int min=0;
    int range = max - min + 1;

    // generate random numbers within 1 to 10
    for (int i = 0; i < 1000; i++) {
        int rand = (int) (Math.random () * range) + min;
        System.out.println ( rand );




        int array[] = {rand};
        int size = array.length;

        for ( i = 0; i < size - 1; i++) {
            int min1 = i;

            for (int j = i + 1; j < size; j++) {
                if (array[j] < array[min1]) {
                    min = j;
                }
            }
            int temp = array[min1];
            array[min1] = array[i];
            array[i] = temp;
        }

        for (int k = 0; k < size; i++) {
            System.out.print(" " + array[i]);
        }
    }
}

Ответы [ 2 ]

1 голос
/ 30 октября 2019

Вам нужно разбить вашу программу на отдельные шаги:

  1. Вставить все случайные числа в массив
  2. Сортировать массив
  3. Распечатать содержимоемассив

Несколько замеченных мной проблем:

  1. Поскольку вы хотите сгенерировать 1000 чисел из 1-10, max и min должны иметь значения 10 и 1соответственно.
  2. array должен быть объявлен до того, как вы начнете вставлять значения. Он также должен иметь фиксированный размер 1000.
  3. В вашем алгоритме сортировки пузырьков также были некоторые ошибки, которые приводили к неправильному выводу. Если вы хотите отсортировать массив от наименьшего к наибольшему, просто измените > на < в условии оператора if.

Я также решил использовать Arrays.toString()печатать массив вместо цикла.

public static void main(String[] args) {
    int max = 10;
    int min = 1;
    int range = max - min + 1;
    int size = 1000;
    int[] array = new int[size];

    for (int i = 0; i < size; i++) {
        int rand = (int) (Math.random() * (range) + min);
        array[i] = rand;
    }

    int temp = 0;
    for (int i = 0; i < size; i++) {
        for (int j = 1; j < size - i; j++) {
            if (array[j - 1] > array[j]) {
                temp = array[j - 1];
                array[j - 1] = array[j];
                array[j] = temp;
            }
        }
    }
    System.out.println(Arrays.toString(array));
}
0 голосов
/ 30 октября 2019

ваш код приведет к ArrayIndexOutException. ниже приведено изменение кода по сравнению с вашим кодом, я не изменяю слишком сильно, чтобы вы могли сравнить их и найти свои ошибки, пожелать добра: D

 public static void main(String[] args) {

    int max = 1000;
    int min=0;
    int range = max - min + 1;


    int[] array = new int[range];
    // generate random numbers within 1 to 10
    for (int i = 0; i < 1000; i++) {
        int rand = (int) (Math.random () * range) + min;
        array[i] = rand;
    }

    int size = array.length;
    for (int i = 0; i < size; i++) {
        int min1 = i;

        for (int j = i + 1; j < size; j++) {
            if (array[j] < array[min1]) {
                min1 = j;//here min1
            }
        }
        int temp = array[min1];
        array[min1] = array[i];
        array[i] = temp;
    }

    for (int k = 0; k < size; k++) {
        System.out.print(" " + array[k]);
    }
}

позвольте мне объяснить это более четко, в коде ОП естьнекоторые вопросы, два направления: один:

for ( i = 0; i < size - 1; i++) {
        int min1 = i;

        for (int j = i + 1; j < size; j++) {
            if (array[j] < array[min1]) {
                min = j;
            }
        }
        int temp = array[min1];
        array[min1] = array[i];
        array[i] = temp;
    }

никогда не будет запущен, поскольку размер массива равен 1, поэтому фраза цикла for будет игнорироваться без выполнения (среднее значение для (int i = 0; i <0); i ++) {....}). </p>

two:

for (int k = 0; k < size; i++) {
        System.out.print(" " + array[i]);
    }

, поскольку размер массива равен 1, поэтому, когда массив [1] выбрасывает индекс исключение. цикл просто запустится один раз, а затем выдаст исключение.

: D

...