#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. Большое вам спасибо! Вы действительно помогаете мне здесь!