我的代码应执行非常基本的搜索并打印ArrayList
书籍,其标题与String参数的书籍相匹配。
如果我对参数进行硬编码,它的效果非常好但是由于某种原因,如果我首先将用户输入用作变量,它就无法工作......为什么这会改变输出?
package com.formation;
public class Livre {
private int id;
private String title;
private int year;
private int edition;
public Livre(int id, String title, int year, int edition) {
super();
this.id = id;
this.title = title;
this.year = year;
this.edition = edition;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public int getEdition() {
return edition;
}
public void setEdition(int edition) {
this.edition = edition;
}
@Override
public String toString() {
return "Livre [id=" + id + ", title=" + title + ", year=" + year + ", edition=" + edition + "]";
}
}
**
package com.formation;
import java.util.ArrayList;
import java.util.List;
public class Google {
private List<Livre> Livres;
public Google(List<Livre> Bookbook) {
super();
this.Livres = Bookbook;
}
public List<Livre> search(String mot) {
List<Livre> searchResult = new ArrayList<Livre>();
for (Livre livre : this.Livres) {
if (livre.getTitle() == mot) {
searchResult.add(livre);
}
}
return searchResult;
}
}
*
package com.formation;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Client {
public static void main(String[] args) {
List<Livre> books = new ArrayList<Livre>();
Livre livre1 = new Livre(1234, "TOTO", 1982, 4);
books.add(livre1);
Livre livre2 = new Livre(2345, "TATA", 1992, 2);
books.add(livre2);
Livre livre3 = new Livre(3456, "TUTU", 1962, 7);
books.add(livre3);
Livre livre4 = new Livre(4567, "TITI", 1972, 5);
books.add(livre4);
Livre livre5 = new Livre(5678, "TETE", 1952, 8);
books.add(livre5);
Google google = new Google(books);
Scanner sc = new Scanner(System.in);
System.out.println("Please enter a title:");
String book = sc.nextLine();
System.out.println(google.search(book)); //returns []
System.out.println(google.search("TATA")); //returns [Livre [id=2345, title=TATA, year=1992, edition=2]]
}
}
答案 0 :(得分:3)
原因是用于比较字符串的==运算符。
硬编码字符串始终只定义一次。因此,如果您的书名是“Test”并且您硬编码“Test”,则==将返回true,因为硬编码的“Test”将是对同一个字符串对象的引用。
但是如果你首先读取用户输入,那么将创建一个新的String并且==将失败。
请尝试使用String1.equals(String2)
。
答案 1 :(得分:0)
您正在使用==等式检查来比较字符串。您应该使用.equals方法。
问题是硬编码的字符串指向内存中的同一个对象,而从System.in扫描的字符串则指向新的对象。尽管内容相同,但它们具有不同的内存地址,因此它们与==运算符不匹配,后者检查真实身份而不是逻辑相等。