我正在尝试制作价格低于给定数量的图书的ArrayList 我一直收到这个编译错误:
JAmos_Chapter09_exercise_94Arrays.java:86: error: double cannot be dereferenced
if ( ( currentJAmos_Chapter09_exercise_94.getPrice( ) ).indexOf( searchString ) != -1 )
^
1 error
在我的数组列表文件的代码中编译此方法之后:
public ArrayList<JAmos_Chapter09_exercise_94> searchForPrice( String searchString )
{
ArrayList<JAmos_Chapter09_exercise_94> searchResult = new ArrayList<JAmos_Chapter09_exercise_94>( );
for ( JAmos_Chapter09_exercise_94 currentJAmos_Chapter09_exercise_94 : library )
{
if ( ( currentJAmos_Chapter09_exercise_94.getPrice( ) ).indexOf( searchString ) != -1 )
searchResult.add( currentJAmos_Chapter09_exercise_94 );
}
searchResult.trimToSize( );
return searchResult;
}
我的方法代码的getPrice部分从这个类文件获取一个double:
/** default constructor
*/
public JAmos_Chapter09_exercise_94( )
{
title = "";
author = "";
price = 0.0;
}
/** overloaded constructor
* @param newTitle the value to assign to title
* @param newAuthor the value to assign to author
* @param newPrice the value to assign to price
*/
public JustinAmos_Chapter09_exercise_94( String newTitle, String newAuthor, double newPrice )
{
title = newTitle;
author = newAuthor;
price = newPrice;
}
/** getTitle method
* @return the title
*/
public String getTitle( )
{
return title;
}
/** getAuthor method
* @return the author
*/
public String getAuthor( )
{
return author;
}
/** getPrice method
* @return the price
*/
public double getPrice( )
{
return price;
}
/** toString
* @return title, author, and price
*/
public String toString( )
{
return ( "title: " + title + "\t"
+ "author: " + author + "\t"
+ "price: " + price );
}
}
总的来说,我想知道如何摆脱
double无法解除引用错误
因为我需要搜索double而不是String。
很抱歉,如果这很长。
答案 0 :(得分:1)
请勿使用.indexOf()
查看价格是否低于特定值。 .indexOf(s)
在另一个字符串中查找字符串的第一个实例的起始索引。
您正在寻找小于比较运算符:<
。
将您的逻辑更改为:
public ArrayList<JAmos_Chapter09_exercise_94> searchForPrice( String searchString ) {
ArrayList<JAmos_Chapter09_exercise_94> searchResult = new ArrayList<JAmos_Chapter09_exercise_94>( );
//Converts the search string price into a double price.
double maxPrice = Double.parseDouble(searchString);
for ( JAmos_Chapter09_exercise_94 currentJAmos_Chapter09_exercise_94 : library ) {
//If itemPrice < maxPrice, add it to the list.
if ( currentJAmos_Chapter09_exercise_94.getPrice( ) < maxPrice)
searchResult.add( currentJAmos_Chapter09_exercise_94 );
}
searchResult.trimToSize( );
return searchResult;
}
如果您的searchString
不是格式良好的双倍,我建议编写一个例程将searchString
转换为双精度。
编辑:如果不清楚,请在评论中询问我......
答案 1 :(得分:0)
因此,如果getPrice()
返回double
,您为什么要对indexOf()
值进行double
?这只是一个数字,你期望它给你什么指数? indexOf()
用于有序的项目集合。
我想知道为什么你首先想要一个String searchString
参数,如果你正在处理数字。为什么参数不是double price
?
如果必须是字符串,则首先将其转换为Double.valueOf()
的两倍,然后使用getPrice()
将其与==
进行比较。