Member 13978326 Ответов: 2

За то, что петля не делает то, что я хочу


Я пытаюсь сравнить два списка друг с другом. Выполните цикл по каждому индексу в обоих списках и сравните значения друг с другом.
1. Одна позиция не совпадает: если loop1[я] != loop2[Дж] и i ==j, то значение у меня в loop1 не соответствует стоимости в loop2.
2. совпадение, но не в позиции: loop1[i]== loop2[j] и i!=j, значение является общим в обоих циклах, но находится в неправильном положении.
3. Если первое происходит более одного раза, то несколько значений не совпадают.

Проблема в том, что когда я тестирую его, я получаю неправильный вывод, например, цикл 1 = 1,2,3,4,5,6,7 и цикл 2 = 1,2,3,5,5,7. Он печатает первый результат. Правильный
проблема вот в чем:
петля1 = 1, 2, 3, 4, 5, 6, 7
loop2 = 1, 2, 4, 3, 5, 6, 7, должен печатать второй результат, но печатает первым результатом вместо.
Напр.
selectedindices = List.of(1, 2, 3, 4, 5, 6)


indicesofpositionguessed = List.of(1, 2, 3, 5, 5, 6


when you compare the two, its supposed to be: "User guess at position 3 is correct but at wrong position" but instead is "User guess at position 3 did not match selected"


Кроме того, по какой-то причине метод возвращает строку, но не распознает возвращаемые строки в цикле for, но заставляет меня поместить оператор return вне цикла for. Почему? Есть ли какой-нибудь способ обойти это?

Что я уже пробовал:

public String guessPosition(List<Integer> indicesOfPositionGuessed) {
       int count = 0;
       for (int i = 0; i < indicesOfPositionGuessed.size(); i++) {
           Integer item1 = indicesOfPositionGuessed.get(i);
           for (int j = 0; j < selectedIndicies.size(); j++) {
               Integer item2 = selectedIndicies.get(j);
               if (i != j) {
                   if (item1.equals(item2) == true) {
                       return "User guess at position " + i + " is correct but at wrong position";
                   }
               }
               if (i == j) {
                   if (item1.equals(item2) == false) {
                       count++;
                       return "User guess at position " + i + " did not match selected";
                   }
               }

           }
       }
       if(count > 0)
           return "User guess did not match in two positions";
       return null;
   }

Patrice T

Добавьте списки, которые дают неверный результат.

Member 13978326

я не понимаю что ты имеешь в виду

Patrice T

Покажите нам входные данные, которые дают неправильные результаты.
Измените свой код, чтобы мы могли запустить его и получить неверный результат.

Member 13978326

selectedindices =

List.of(1, 2, 3, 4, 5, 6)


indicesofpositionguessed =
List.of(1, 2, 3, 5, 5, 6


когда вы сравниваете их, это должно быть: "пользователь угадывает в позиции 3 правильно, но в неправильной позиции", но вместо этого "пользователь угадывает в позиции 3 не соответствует выбранному"

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

2 Ответов

Рейтинг:
1

Patrice T

Цитата:
когда вы сравниваете их, это должно быть: "пользователь угадывает в позиции 3 правильно, но в неправильной позиции", но вместо этого "пользователь угадывает в позиции 3 не соответствует выбранному"

Я не вижу ничего очевидного в коде, чтобы объяснить этот ответ, способ узнать, что происходит, - это использовать отладчик и что 2 списка-это то, что вы ожидаете, а затем установить точку останова и наблюдать за выполнением кода.
-----
Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш cpde, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.
Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html[^]
https://www.jetbrains.com/idea/help/debugging-your-first-java-application.html[^]
Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.


Рейтинг:
0

CPallini

Ну, это просто, когда i=3 и j=3 условие (1) выполняется, и функция возвращается.
Условие (2) будет выполнено, когда i=3 и j=4 но функция не достигнет такой точки.

То есть для каждого из угаданных индексов вы должны искать в выбранном массиве совпадение, чтобы проверить условие (2). При неудачном поиске автоматически выполняется условие (1).