Мне было поручено создать программу бинарного поиска домашней работы (не имеет отношения к вопросу, вроде).Было предложено установить значения целочисленного массива самостоятельно, но я решил пойти немного дальше для собственной разработки.Тем не менее, кажется, что есть логическая ошибка, потому что условие проходит как истина, когда, казалось бы, не должно быть.Я пытаюсь проверить, что значение не присутствует в целочисленном массиве и не равно 0, и если это так, добавьте его в массив.
Я проверил свой синтаксис, изменил логику,и пытался использовать разные петли.Другие способы избежать 0 и дубликатов кажутся намного более сложными, если только в моем понимании нет фундаментальной ошибки.
Вот что я получил:
int numbers[] = new int[50];
for(int i = 0; i < numbers.length; i++) {
int addVal = (int)(Math.random()*400+1); //assign addVal to a random int
boolean duplicate = IntStream.of(numbers).anyMatch(x -> x == addVal); //check if array contains the random value generated and assigned to addVal
if(addVal != 0 && duplicate == false) { //when the number is not 0 and is not in the list
numbers[i] = addVal; //add it to the list
}
}
Arrays.sort(numbers); //sort the numbers
Вот пример вывода при печатизначения массива:
[0, 0, 11, 21, 34, 40, 51, 53, 54, 61, 76, 91, 114, 120, 166, 173, 199, 209, 249, 266, 277, 295, 301, 312, 340, 349, 355, 365, 366, 392]
Я ожидал, что это будет работать следующим образом: я создаю массив для хранения 50 значений.Для каждого индекса присвойте addVal случайное целое число в диапазоне от 0 до 400 (добавьте 1, чтобы увидеть, уменьшает ли он частоту, появляется 0, кажется, увеличение не помогло).Затем проверьте, содержит ли мой массив чисел значение, случайно назначенное addVal.Если это не так и значение также не равно 0, добавьте его в массив.После того, как все значения были добавлены, я сортирую массив (для двоичного поиска).
Буду очень признателен за любую помощь в поиске моей ошибки.
Кроме того, есть два дополнительных вопроса: как мне изменить это для работы с одним расширенным циклом for, и почему сортировка массива в цикле for приводит к значительному увеличению нуля?