Java функция для сравнения позиции массивов для позиции? - PullRequest
0 голосов
/ 17 декабря 2018

Я недавно начал изучать Java для удовольствия, но застрял в следующей проблеме: у меня есть 2 массива int [], которые содержат представление покерной руки.Позиция 0 в массиве указывает, является ли это стрит-флешем, а число в нем указывает значение старшей карты.Позиция 1 в массиве указывает, является ли ее для вида, и значение карты, поэтому 5 здесь означает, что у вас есть четыре фактора в 5: с и т. Д.

Поэтому я хочу сравнить все массивы игроков по первой позиции 0(для стрит-флеша) и игрок с наибольшим числом выигрывает .. если у всех 0 или 2 или более игроков, равные числа равны шагу к позиции 1 в массиве, сравнивают и т. д.

Для упрощения кодаЯ попытался сделать функцию сравнения, которая сравнивает руки двух игроков и возвращает, если hand1 (в коде array1) выше, чем рука 2 (массив 2)

  • Если H1> H2, возвращает 1
  • Если H1

    Если равно, вернуть 0

Я сделал следующий код (это не работает):

int isBetterHand(int[] array1, int[]array2){ //private
    if(array1.length > array2.length){ throw new RuntimeException("arrayCompare got arrays of different length.");}
    int arrayLength = array1.length;
    for(int i = 0; i < arrayLength; i++){
        if(array1[i] > array2[i]){
            return 1;
        } else if(array1[i] < array2[i]){
            return -1;
        } else {
            return 0;
        }
    }
    return 0;
}

Я полагаю, что в Java вы не можете написать, если array1 [0] (например, компаратор <,>, ==) array2 [0]

Как исправить приведенный выше код?И есть ли более быстрый, лучший и умный способ сделать это?Массивы имеют длину 26 номеров.Мне нужно совместно сравнить до 8 массивов.

Скажем, у меня в игре осталось 5 игроков, я мог бы получить такую ​​матрицу (я набираю только первые 5 позиций:

P1 0, 0, 0,0, 0, ... P2 0, 0, 0, 0, 0, ... P3 0, 2, 0, 0, 0, ... P4 0, 0, 13, 3, 0, ... P50, 0, 0, 0, 14, ...

В приведенном выше примере pos [0] означает, что старшая карта в стритфлеше ни у кого не имеет, что в pos [1] она показывает, что P3 - победитель с четырьмя типамичерез 2: s ((pos [2] & [3] показывает, что у P4 фулл хаус K больше 3 (но P3 4 в некотором роде лучше ...)))

Редактировать: Просто вау! Я нене жду ответов так быстро. Теперь это работает как шарм. БОЛЬШОЕ! Спасибо всем, кто мне помог.

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

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Эта функциональность встроена начиная с Java 9: ​​

    return Arrays.compare(array2, array1); // Reverse args to get higher value first

Обратите внимание, что я перевернул два аргумента, чтобы сначала получить более высокое значение.

0 голосов
/ 17 декабря 2018

Похоже, у вас в основном правильная идея.Единственная проблема - раннее возвращение 0 из цикла.Во время выполнения цикла вы должны возвращать 1 или -1, только если соответствующие элементы массива не равны.Только после того, как вы исчерпали весь массив, вы можете сделать вывод, что они равны, и вернуть 0:

for (int i = 0; i < arrayLength; i++) {
    if (array1[i] > array2[i]) {
        return 1;
    } else if (array1[i] < array2[i]) {
        return -1;
    }
    // else claus removed here
}
return 0;

Редактировать: Как упоминал Энди Тернер в комментарии, вы также должны убедиться, что два массива имеют одинаковую длину, а не только то, что первый не длиннее второго.Собираем все это вместе:

int isBetterHand(int[] array1, int[]array2) {
    i f(array1.length != array2.length) {
        // Use != ----^
        throw new RuntimeException("isBetterHandgot arrays of different length.");
    }
    int arrayLength = array1.length;
    for (int i = 0; i < arrayLength; i++) {
        if (array1[i] > array2[i]) {
            return 1;
        } else if (array1[i] < array2[i]) {
            return -1;
        } 
        // else clause removed here
    }
    return 0;
}
...