在书店搜索书籍时,说对象是书,每个书籍对象都有标题,作者,ISBN代码等。
假设我使用`scan.next()'
输入ISBN作为String
我接受此输入并使用它来查找arraylist中的对象,如下所示:
public Book searchISBN (String givenISBN){
Book foundBook = null;
for(Book findISBN : bookStore){
if(findISBN.getISBN().equals(givenISBN)){//edit changed this to inc. !=null as suggested
foundBook = findISBN;}
}
return foundBook;
我不明白为什么会这样。当我包含以下代码时,其目的是设置任何具有等于指定分类的空分类的书:
if(selectedBook.getISBN().equals(null)){...
如果我使用上面的代码行运行,我会得到一个空指针异常。在这一行有一个警告,说明' object equals null永远不是真的',在创建book对象的类中String ISBN = null
,因为目的是在另一个类中为此设置一个值,该类为书店创建对象,其中我的集合中的一半书籍设置为ISBN。如果它们等于null,则另一半意味着设置ISBN(在主方法
不知道该如何处理。
由于问题可能出在get方法上,所以就是这样:
//the Book constructor has ISBN = null
public String getISBN(String givenClass){
return ISBN
}
答案 0 :(得分:1)
如果在此行获得NullPointerException,可能是因为引用为null而您无法在空引用上调用方法。
to
警告而是由于您使用equals()方法检查null。你应该使用==
if(selectedBook.getISBN().equals(null)){....
现在没有相关代码,我们不清楚你的程序背后的逻辑。我将尝试描述两种可能的情况。
假设selectedBook引用可以为null,则无需检查ISBN是否为null。您只需检查参考。
if(selectedBook.getISBN() == null)){....
如果新创建的图书可以从您的说明中查找ISBN = null,并且如果我理解您所说的内容,则您在另一个班级中分配ISBN的值,为什么不简单地设置ISBN是默认值吗?
if(selectedBook == null){....// your logic here
然后执行检查
String ISBN = "undefined"
最后,让我在这段代码中指出
if(selectedBook.getISBN().equals("undefined"){....// your logic here
ISBN似乎是Book的类型,而不是你在帖子开头提到的字符串,但是如上所述,如果没有看到你的程序的其余部分,则不清楚究竟发生了什么。
希望很清楚。
答案 1 :(得分:0)
最有可能的是,你的getISBN()函数返回null。是的,新创建的字符串对象永远不会为空。您可以if(findISBN.getISBN()!=null && findISBN.getISBN().equals(givenISBN))
检查返回的值是否为空。
答案 2 :(得分:0)
你的getISBN()可能会返回null,在if之前执行null检查。 override func viewDidLoad() {
super.viewDidLoad()
let frame = MyView.frame
frame.origin.x += 50
MyView.frame = frame
}
。