. В основном, что делает следующий код (предположим), создайте набор неповторяющихся случайных чисел, заполните их до массива, который преобразуется в список и сортирует их. Проблема заключается в вложенных циклах, я управлял работой, но даже не уверен, как она работает. Во-вторых, я наклоняю, кажется, сортирую его правильно, время от времени появляются повторяющиеся ошибки и ошибки.Цикл сортировки Java не работает
Как работает код:
- Генерация неповторяющихся случайных чисел
- Заполнить массив с ними
- Использование вложенных для цикла, чтобы найти наименьшее значение
- Вставить, что в новый массив
- Удалить его из первого массива
Повторите последние 2 шага, пока первый массив не будет пустым и вторым Массив ОС заливается в упорядоченном
import org.apache.commons.lang.ArrayUtils; import java.util.ArrayList; import java.util.Arrays; import java.util.*; import java.lang.*; import java.io.*; public class Sorter { public static void main(String[] args) { int[] process = fillArray(20,1,25); sorter(process,20); } public static int[] sorter(int array[],int size) { int[] useArray = array; Integer[] newArray = ArrayUtils.toObject(useArray); List<Integer> arrayList = new ArrayList(Arrays.asList(newArray)); //System.out.println((arrayList)); int counter = 1; int minval = 0; int diffsize = size - 1; int actualVal = 0; int storeArray[] = new int[size]; int removeIndex =0; Integer[] newStore = ArrayUtils.toObject(storeArray); List<Integer> storeList = new ArrayList(Arrays.asList(newStore)); System.out.println((arrayList)); // Both loops messed up for (int i = 0; i < size+diffsize; i++) { for (int n = 0; n < size-1; n++) { if (arrayList.get(minval) < arrayList.get(counter)) { actualVal = arrayList.get(minval); System.out.println((arrayList.get(minval)) + " Less than " + arrayList.get(counter)); counter = counter + 1; removeIndex = minval; } else { actualVal = arrayList.get(counter); System.out.println((arrayList.get(counter)) + " Less than " + arrayList.get(minval)); minval = counter; counter = counter + 1; removeIndex = counter; } } // System.out.println(actualVal); storeList.add(actualVal); arrayList.remove(actualVal); // need to remove the smallest value to repeat the sorting and get the next smallest value, but this is not removing it size = size - 1; counter = 1; minval = 0; // if (i + size == i) { // storeList.set(i, arrayList.get(0)); // } // System.out.println(removeIndex); // System.out.println(arrayList); } // System.out.println(storeList); int[] ints = new int[storeList.size()]; int d = 0; for (Integer u : storeList) { ints[d++] = u; } return ints; } public static int randomNum(int lower,int upper){ Random rand = new Random(); int randomNum = lower + rand.nextInt((upper- lower) + 1); return randomNum; } public static int[] fillArray(int size,int lowerBound,int upperBound){ int holdArray[] = new int[size]; int rand = 0; for (int count =0;count < holdArray.length;count++){ holdArray[count] = 0; } for (int count =0;count < holdArray.length;count++){ rand = randomNum(lowerBound,upperBound); if (ArrayUtils.contains(holdArray, rand)) { while (ArrayUtils.contains(holdArray, rand)) { rand = randomNum(0, 20); } } holdArray[count] = rand; } // System.out.println(Arrays.toString(holdArray)); //return holdArray; return holdArray; } }
в то время как (ArrayUtils.contains (holdArray, RAND)) { Rand = randomNum (0, 20); } Вы не используете свои границы. –
Разделить и победить. Сначала напишите простую функцию сортировки и проверьте это. Вы не хотите использовать встроенные методы сортировки, чтобы вы могли учиться правильно? Читайте о сортировке пузыря или что-то в этом роде и реализуйте это в первую очередь. Тогда остальное будет проще. –
Я не понимаю. У вас есть четыре разных 'Integer []' массива, три 'int []' массива * и * два 'ArrayList'. Некоторые из них являются копиями исходного массива, некоторые заполняются нулями или нулями (ни один из них не пуст). Не ясно, что вы на самом деле читаете во время сортировки, но ясно, что добавление к непустому списку не может привести к правильному результату. – Holger