无法使用变量打印ArrayList

时间:2016-03-24 10:22:08

标签: java arraylist

我的代码应执行非常基本的搜索并打印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]]

}

}

2 个答案:

答案 0 :(得分:3)

原因是用于比较字符串的==运算符。

硬编码字符串始终只定义一次。因此,如果您的书名是“Test”并且您硬编码“Test”,则==将返回true,因为硬编码的“Test”将是对同一个字符串对象的引用。

但是如果你首先读取用户输入,那么将创建一个新的String并且==将失败。

请尝试使用String1.equals(String2)

答案 1 :(得分:0)

您正在使用==等式检查来比较字符串。您应该使用.equals方法。

问题是硬编码的字符串指向内存中的同一个对象,而从System.in扫描的字符串则指向新的对象。尽管内容相同,但它们具有不同的内存地址,因此它们与==运算符不匹配,后者检查真实身份而不是逻辑相等。