Поиск строки внутри массива объектов

#java #arrays #string #object #if-statement

#java #массивы #строка #объект #if-оператор

Вопрос:

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

Проблема, с которой я в настоящее время сталкиваюсь, заключается в том, что я ищу в массиве определенный элемент. Независимо от того, что я ввожу для критериев поиска, оно всегда возвращается true. Я думаю, что мне где-то не хватает фрагмента кода, потому что это почти так, как если бы программа на самом деле не просматривала контекст строки, чтобы увидеть, соответствует ли она. Вот моя программа:

 import java.util.Arrays;
import java.util.Scanner;

public class TrippelTylerPersonalLendingLibrary {

   //Fields
   MediaItem[] items = new MediaItem[100];
   int numberOfItems = 0;

   //Methods
   int displayMenu() {
       Scanner input = new Scanner(System.in);
       int choice;
       System.out.print("nMenun"  
            "1. Add new itemn"  
            "2. Mark an item as on loann"  
            "3. List all itemsn"  
            "4. Mark an item as returnedn"  
            "5. Quitnn"  
            "What would you like to do?");
       choice = input.nextInt();
       if(choice<1 || choice>5) {
           while(choice<1 || choice>5) {
               System.out.println("You have entered an invalid menu choice.n"  
                    "What would you like to do?");
               choice = input.nextInt();
           }
           return choice;
       }
       else {
           return choice;
       }
   }

   void addNewItem(String title, String format) {
       String titleNew = title;
       String formatNew = format;
       MediaItem newItem = new MediaItem(titleNew, formatNew);
       items[numberOfItems] = newItem;
       numberOfItems= numberOfItems   1;
   }

   void markItemOnLoan(String title, String name, String date) {
       String itemTitle=title;
       String person=name;
       String itemDate=date;
       for(int i=0; i<items.length;i  ) {
           if(itemTitle == items[i].title) {
               items[i].onLoan = true;
               items[i].dateLoaned = itemDate;
               items[i].loanedTo = person;
           }
           else{
               System.out.println("I'm sorry, I couldn't find "   itemTitle   
                    " in the library.");
           }
       }
   }

   String[] listAllItems() {

   }

   void markItemReturned(String title) {

   }

   //Main method
   public static void main(String[] args) {

       TrippelTylerPersonalLendingLibrary instance = new TrippelTylerPersonalLendingLibrary();
       MediaItem instance2 = new MediaItem();


       //Fields for main method
       int choice;
       int repeat = 1;
       String newTitle;
       String newFormat;
       String name;
       String date;
       boolean loaned;

       while(repeat == 1) {
          choice = instance.displayMenu();
          if(choice == 1) {
             newTitle = instance2.setTitle();
             newFormat = instance2.setFormat();
             instance.addNewItem(newTitle, newFormat);
          }
          else if(choice == 2) {
             Scanner input = new Scanner(System.in);
             String titleToLoan;
             name=instance2.setLoanedTo();
             date=instance2.setDateLoaned();
             loaned=instance2.setOnLoan();
             titleToLoan= input.nextLine();
             instance.markItemOnLoan(titleToLoan, name, date);
          }
       }
   }

}
  

В основном методе, когда выбор == 2, он вызывает markItemOnLoan() и передает строки на основе того, что вводит пользователь. Даже если я ввожу что-то совершенно неправильное, это никогда не приводит к оператору else в markItemOnLoan методе. Нужно ли мне изменить способ поиска строки?

Спасибо всем!,

Тайлер

Ответ №1:

if(itemTitle.equals(items[i].title)) — правильный способ. .потому что == сравниваются только примитивные типы данных, такие как int.to сравните типы данных объектов, которые вы должны использовать.пример метода equals «hi».equals («привет») является истинным

Комментарии:

1. Спасибо за это объяснение! Это действительно помогло прояснить, почему ответ Autocrab был правильным. 🙂

Ответ №2:

 if(itemTitle.equals(items[i].title))
  

Комментарии:

1. Вы должны немного объяснить свой ответ вместо того, чтобы писать только однострочный код.

2. Большое вам спасибо! Вы действительно помогаете мне здесь!