Почему мой код сравнивает только первый и последний номер массива - Java - PullRequest
0 голосов
/ 04 апреля 2019

Я хочу получить минимальное количество моего массива, но мое сравнение "if" проверяет только первую и последнюю позиции массива.

Вот мой код:

int[] randNumbers = new int[20]; //deklaracja nowej tablicy 20-elementowej

Random r = new Random(); // Dodana metoda random do losowania

for(int i=0; i<randNumbers.length; i++) {
    randNumbers[i] = r.nextInt(101);
    int min = randNumbers[0];

    System.out.println("Number "+i+": " +  randNumbers[i]);


    if (randNumbers[i] < min) {
        min = randNumbers[i];
    }
    if (i == randNumbers.length-1) {
        System.out.println("Min number is: " + min);
    }
}

Ответы [ 4 ]

0 голосов
/ 04 апреля 2019
  1. Переместить min int вне цикла со значением 0 не работает, потому что мой результат будет каждый раз, потому что неинициализированный массив имеет только '0'
  2. Переместить его на 100+ - хорошая идея. Это работает, когда мы знаем максимальное число.
  3. @ geneSummons "int min = Integer.MAX_INT" Это очень хорошо работает с разным диапазоном / областью чисел :) Спасибо

Btw. Я до сих пор не понимаю, почему сравнивают только первое и последнее число;)

0 голосов
/ 04 апреля 2019

попробуйте, ваш int min = randNumbers[0]; сбрасывает значение min каждый раз, поэтому выведите его из цикла

int min = 100;
for(int i=0; i<randNumbers.length; i++) {
    randNumbers[i] = r.nextInt(101);
    System.out.println("Number "+i+": " +  randNumbers[i]);
    if (randNumbers[i] < min) {
          min = randNumbers[i];
    }
}
System.out.println("Min number is: " + min);
0 голосов
/ 04 апреля 2019

Вам даже не нужен массив здесь. Просто выполните итерацию от 0 до N и проверьте каждое случайное число, если оно меньше min:

Random r = new Random();
int min = 101;    // assign max value 101 before loop

for(int i = 0; i < 20; i++) {
    int number = r.nextInt(101);
    System.out.println("Number " + i + ": " +  number);
    if (number < min) {
        min = number;
    }
}
System.out.println(min);   

Если вы хотите использовать массив, вы можете инициализировать его раньше. Например, используя Random.ints():

int[] randNumbers = new Random().ints(20, 0, 101).toArray();

А затем используйте ту же самую идею for-loop с randNumbers[i] вместо nextInt(101)

0 голосов
/ 04 апреля 2019

Проблема в том, что вы не помните минимальное число во время выполнения цикла.Если вы создадите переменную вне цикла, она не будет обновляться каждую отдельную итерацию.Ваш код может выглядеть примерно так:

int[] randNumbers = new int[20]; //deklaracja nowej tablicy 20-elementowej
Random r = new Random(); // Dodana metoda random do losowania
int min = 0;

for(int i=0; i<randNumbers.length; i++) {
    int number = r.nextInt(101);
    if(i == 0) min = number;
    randNumbers[i] = number;
    System.out.println("Number "+i+": " + number);

    min = Math.min(min, number);
}

System.out.println("Min number is: " + min);

Несколько замечаний:

  • Переменная min была перемещена за пределы цикла.Это сделано для того, чтобы убедиться, что он постоянен в цикле и не будет обновляться при каждой итерации цикла.
  • Введена новая переменная number.Это должно помешать вам постоянно звонить randNumbers[i], что выглядит лучше, и, насколько мне известно, это немного ускоряет.Это также облегчает изменение переменной один раз и позволяет применять ее везде, где это необходимо.
  • Последний S.O.P был перемещен за пределы цикла.Нет смысла проверять, находится ли цикл в последнем элементе, если вы можете просто поместить оператор в строку после окончания цикла.Он будет работать так же функционально, но выглядит лучше.
  • Вместо использования оператора if для установки min он использует вывод Math.min.Это просто косметическое изменение и ведет себя точно так же с оператором if.
...