Для каждого найти объект в массиве и вернуть этот объект

Новенький, у меня небольшая проблема, от которой у меня болит голова. Мне кажется, что нужно исправить одну строчку кода, но хоть убей, я не могу это понять.

У меня должен быть цикл for-each, который находит объект в массиве и возвращает этот объект, если он существует, и возвращает null, если он не существует. И все же вот что для меня странно: он может легко найти объект и установить его на что-то, не на объект, а просто на что-то. Я могу сказать, потому что другие методы, зависящие от этой работы, отлично работают, этот просто не возвращает объект по какой-либо причине. В любом случае, вот код, я не думаю, что вам нужно что-то еще

   public Icosahedron findIcosahedron(String labelIn) {
      Icosahedron output;
      output = null;
      for (Icosahedron i : iList) {
         if (i.getLabel().equalsIgnoreCase(labelIn))  {
            output = i;
         }
      }
      return output;
   }

Запрошено:

 case 'F':
           System.out.print("\tLabel: ");
           label = userInput.nextLine();
           if (myIcosahedronList.findIcosahedron(label) != null) {
               myIcosahedronList.findIcosahedron(label);
           }
           else {
              System.out.println("\"" + label + "\" not found");
           }
           break; 

как узнать, что объект не возвращается?

nupadhyaya 09.10.2018 23:42

@nupadhyaya У меня есть другой набор кода, который, когда вы вводите метку, говорит что-то вроде «он существует», а затем возвращает объект. Вместо этого он просто говорит, что объект существует, а затем переходит к следующему биту в цикле.

Clownkitty 09.10.2018 23:44

ты можешь опубликовать этот код

nupadhyaya 09.10.2018 23:45

Вы не назначаете вывод myIcosahedronList.findIcosahedron (label); ни к чему.

Grant Foster 09.10.2018 23:50
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
4
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Как только вы найдете объект, вам следует прекратить поиски:

  for (Icosahedron i : iList) {
     if (i.getLabel().equalsIgnoreCase(labelIn))  {
        output = i;
        break;
     }
  }

Используйте break, чтобы выйти из цикла.

Во второй части вашего хранилища кода:

case 'F':
           System.out.print("\tLabel: ");
           label = userInput.nextLine();
           Icosahedron icosahedron = myIcosahedronList.findIcosahedron(label);
           if ( icosahedron == null) {
               System.out.println("\"" + label + "\" not found");
           }
           else {
              // Do something with icosahedron
           }
           break; 

просто return i и скиньте output.

luk2302 09.10.2018 23:43

Я согласен с этим, но чтобы внести минимальные изменения и помочь OP понять причину, я изменил этот способ.

user987339 09.10.2018 23:45

Пробовал именно это, но вроде не получилось. Не могу просто вернуть i для этого назначения, потому что мне нужно вернуть null, если он не существует, если только я не буду удерживать null, пока он не будет назначен чему-то еще?

Clownkitty 09.10.2018 23:49
Ответ принят как подходящий

В вашем коде нет функции System.out.print (), поскольку, когда объект найден, вы запускаете функцию и ничего не делаете с тем, что она возвращает:

 case 'F':
           System.out.print("\tLabel: ");
           label = userInput.nextLine();
           if (myIcosahedronList.findIcosahedron(label) != null) {
               myIcosahedronList.findIcosahedron(label); // <- here
           }
           else {
              System.out.println("\"" + label + "\" not found");
           }
           break; 

Другие вопросы по теме