Есть ли способ получить Math.min () для случайных целых чисел? Джава - PullRequest
0 голосов
/ 02 декабря 2019

Я сейчас играю в игру и пытаюсь сравнить кратчайший путь, отображаемый на экране (случайный сгенерированный путь целых чисел), и путь, по которому идет пользователь. Эта часть кода является той, в которой я пытаюсь получить Math.min() от общего числа путей на экране:

int path1 = randomNum3 + randomNum8;
int path2 = randomNum2 + randomNum7;
int path3 = randomNum + randomNum6;
int path4 = randomNum3 + randomNum5 + randomNum7;
int path5 = randomNum2 + randomNum5 + randomNum8;
int path6 = randomNum + randomNum4 + randomNum7;
int path7 = randomNum2 + randomNum4 + randomNum6;


int caminoMasCorto = Math.min(path1, path2, path3, path4, path5,
        path6, path7);

Ошибка, которая показывает мне, это:

не найден подходящий метод для min (int, int, int, int, int, int, int)

метод Math.min (int, int) не применим

(фактическийи формальные списки аргументов различаются по длине)

Ответы [ 3 ]

3 голосов
/ 02 декабря 2019

Чтобы найти минимум из множества int переменных, используйте:

int caminoMasCorto = IntStream.of(path1, path2, path3, path4, path5,
        path6, path7).min().getAsInt();

Если вы не используете Java 8+, вы можете сделать это:

int caminoMasCorto = path1;
for (int value : new int[] { path2, path3, path4, path5, path6, path7 })
    caminoMasCorto = Math.min(caminoMasCorto, value);
3 голосов
/ 02 декабря 2019

Да. Как говорится в ошибке, Math.min(int, int) принимает два аргумента. Измените

int caminoMasCorto = Math.min(path1, path2, path3, path4, path5,
        path6, path7);

на

int caminoMasCorto = Math.min(path1, Math.min(path2, 
        Math.min(path3, Math.min(path4, Math.min(path5, Math.min(path6, path7))))));

или (как отметил Андреас)

int caminoMasCorto = Math.min(Math.min(Math.min(Math.min(Math.min(Math.min(
        path1, path2), path3), path4), path5), path6), path7);

В качестве альтернативы вы могли бы написать свой собственный min функция, которая принимает произвольное число int (s) и возвращает наименьшее. Например,

private static int myMin(int... vals) {
    if (vals == null || vals.length < 1) {
        throw new RuntimeException("No values");
    }
    int t = vals[0];
    for (int i = 1; i < vals.length; i++) {
        t = Math.min(t, vals[i]);
    }
    return t;
}

А затем используйте

int caminoMasCorto = myMin(path1, path2, path3, path4, path5,
        path6, path7);

Используйте то, что вы считаете наиболее читабельным.

1 голос
/ 02 декабря 2019

Java Math.min принимает два аргумента. Чтобы расширить это до нескольких номеров, попробуйте этот метод:

public int minExtension (int... numbers) {
    int minimum = numbers[0];

    for (int number : numbers) {
        minimum = Math.min(number, minimum)
    }

    return minimum
}

Назовите это так

int caminoMasCorto = minExtension (path1, path2, path3, path4, path5, path6, path7);
...