0

我正在尝试制作价格低于给定数量的书籍的 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 部分从此类文件中获取双精度:

 /** 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 不能被取消引用错误

因为我需要搜索双精度而不是字符串。

对不起,如果这很长。

4

2 回答 2

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成双精度数。

编辑:如果不清楚,请在评论中询问我...

于 2012-11-25T03:27:35.390 回答
0

那么,如果getPrice()返回 a double,你为什么要indexOf()处理这个double值?它只是一个数字,你希望它给你什么指数?indexOf()用于项目的有序集合。

String searchString如果您正在处理数字,我想知道为什么您首先需要一个参数。为什么参数 adouble price也不是?

如果它必须是一个字符串,则首先将其转换为 double through Double.valueOf(),然后将其与getPrice()using进行比较==

于 2012-11-25T03:26:38.477 回答