Сортировка выбором Java, что не так с моим кодом?

import java.util.Random;

public class Tester {
    public static void main(String[] args) {
        selectionSort(args);
    }

    private static void printArray(int[] anArray) {
        for (int i = 0; i < anArray.length; i++) {
            if (i > 0) {
                System.out.print(", ");
            }
            System.out.print(anArray[i]);
        }
    }


    public static void selectionSort(String[] args) {

        int i, x = 0;

        int l = 10;
        Random r = new Random(271);
        int array[] = new int[l];
        for (i = 0; i < l; i++) {
            array[i] = r.nextInt();
        }

        while (i < l) {

            for (int j = 1; j <= i; j++) {
                if (array[j] < array[x])
                    x = j;
            }

            i++;
        }
        printArray(array);
    }

}

Все в порядке, я просто не могу распечатать его правильно. Когда я печатаю, я получаю "-1061221096, -349834974, -1279215928, 1452441141, -367008517, 638966200, -464597014, 1551135748, -446923224, 542496703", что неверно. Я считаю, что каждое число должно быть меньше 271.


person DataStructors23    schedule 03.02.2016    source источник
comment
Каков ваш вклад? и почему вы передаете метод args в selectionSort?   -  person Balwinder Singh    schedule 04.02.2016
comment
Ввода нет, я должен получать только вывод. Я полагаю, что передаю (int[] arr) в сортировку выбора, но при этом получаю ошибки.   -  person DataStructors23    schedule 04.02.2016
comment
Random имеет внутреннее семя и алгоритм, который требует, чтобы вы использовали один экземпляр для группы значений, использование нескольких экземпляров может генерировать повторяющиеся значения или даже значения в том же порядке.   -  person MadProgrammer    schedule 04.02.2016
comment
связанные: stackoverflow.com/questions/5827023/   -  person Mark Rotteveel    schedule 13.02.2016


Ответы (3)


Попробуйте заменить это:

 Random r = new Random(271);

С:

 Random r = new Random();

И замените это:

 array[i] = r.nextInt();

С:

 array[i] = r.nextInt(271);

Вы можете вывести что-то вроде этого под 271:

  18, 94, 189, 105, 32, 153, 68, 159, 178, 34
person Abdelhak    schedule 03.02.2016
comment
Спасибо. Пожалуйста, оцените это, если можете, у меня меньше 15 кармы. - person DataStructors23; 04.02.2016

У вас есть линия

Random r = new Random(271);

Теперь, каждый раз, когда я использовал Random, я всегда делал это с

Random r = new Random();
int rand = r.nextInt(271);

Это должно работать, как ожидалось.

И просто с точки зрения очистки кода вам не нужно передавать args[] в selectionSort(). Вы можете просто сделать метод без параметров и ничего не передавать из основного метода.

person space55    schedule 03.02.2016
comment
Спасибо, пожалуйста, оцените этого парня, так как у меня меньше 15 кармы. - person DataStructors23; 04.02.2016

while (i < l){
    for(int j=1; j<=i; j++){
        if(array[j] < array[x])
            x = j;
    }

    i++;}

этот фрагмент кода не будет вызываться, потому что «i» равно «l» из-за предыдущего цикла. 271 называется начальным числом, и оно не даст вам случайных чисел меньше 271, чтобы генерировать числа меньше 271, вы должны использовать r.next(271) см. документацию по API случайный API JSE7

person achabahe    schedule 04.02.2016