检查 ArrayList 中 Object 变量的方法

Method to check a Object's variables within an ArrayList

我在使用 ArrayList object 创建以下两种方法时遇到问题:

  1. existTextbook():检查给定的教科书是否在目录中。 existTextbook() 接受标题和作者以及 returns true 或 false。如果教科书在目录中,则为真,否则为假。

  2. deleteTexbook(): 从目录中删除教科书。 deleteTextbook() 接受教科书标题作为参数,如果教科书存在则将其删除。

搜索 Java API,我能找到的第一个方法最接近的方法是 contains 方法,但它需要一个 object 作为参数,而不是字符串 object 在教科书 object 中,如标题或作者。以ArrayList的一个object为参数的第二种方法的remove方法也是如此。

关于如何查看每个教科书的方法的任何提示 object 字符串标题或作者,如果找到匹配项,则 return 为真,或者删除教科书 object包含教科书 object 字符串标题或作者?

到目前为止,这是我的代码:

教科书Class

package Ex1;

import java.text.NumberFormat;

public class Textbook 
{
private String category, title, author;
private int year;
private double price;

public Textbook (String category, String title, String author, int year,
                 double price)
{
    this.category = category;
    this.title = title;
    this.author = author;
    this.year = year;
    this.price = price;
}

public String toString()
{
    NumberFormat fmt = NumberFormat.getCurrencyInstance();

    String description;

    description = "Category: " + category + "\n";
    description += "Title: " + title + "\n";
    description += "Author: " + author + "\n";
    description += "Year: " + year + "\n";
    description += "Price: " + fmt.format(price) + "\n" + "\n";

    return description;
}

}

目录Class

package Ex1;

import java.util.ArrayList;

public class Catalogue 
{
private ArrayList <Textbook> catalogue;

public Catalogue ()
{
    catalogue = new ArrayList<Textbook>();
}

public void addTextbook (Textbook t) 
{
    catalogue.add(t);
}

public boolean existTextbook(String title, String author)
{

}

public void deleteTextbook(String title)
{   

}

public String toString()
{
    return catalogue.toString(); 
}
}

Driver Class

package Ex1;

public class Drivermain 
{
public static void main(String[] args) 
{
    Textbook javaBook = new Textbook ("Computer Science", 
            "Java Software Solutions", "Lewis/Loftus", 2015, 163.45);

    Textbook dataBook = new Textbook ("Computer Science", 
            "Data Structures and Algorithm Analysis in Java,", 
            "Mark A. Weiss", 2015, 181.90);

    Textbook calcBook = new Textbook ("Mathematics", 
            "Calculus Plus NEW MyMathLab", "Briggs/Cochran/Gillett",
            2015, 236.90);

    Textbook osBook = new Textbook ("Computer Science", 
            "Operating Systems: Internals and Design Principles",
            "William Stallings", 2015, 205.70);

    Textbook historyBook = new Textbook ("History", 
            "History of the Canadian Peoples: Beginnings to 1867, Vol. 1",
            "Conard/Finkel/Fyson", 2015, 96.90);

    Catalogue bookCatalogue = new Catalogue();

    bookCatalogue.addTextbook(javaBook);
    bookCatalogue.addTextbook(dataBook);
    bookCatalogue.addTextbook(calcBook);
    bookCatalogue.addTextbook(osBook);
    bookCatalogue.addTextbook(historyBook);

    System.out.println(bookCatalogue);


    bookCatalogue.existTextbook("Java Software Solutions", "Lewis/Loftus");
    bookCatalogue.deleteTextbook("Java Software Solutions");

    }
}

您可以考虑自己循环遍历目录 ArrayList 并测试当前 object 是否与标题(和作者)匹配,而不是直接使用这些方法。 这可能有点矫枉过正,但你可以让教科书实现 Comparable or write a Comparator.

我认为与其使用集合中的方法,不如自己处理 Arraylist 中的查找。

我没有使用 for each 循环(只是一个 for 循环),因为删除它会导致并发修改异常。

 package Ex1;

import java.util.ArrayList;

public class Catalogue 
{
private ArrayList <Textbook> catalogue;

public Catalogue ()
{
    catalogue = new ArrayList<Textbook>();
}

public void addTextbook (Textbook t) 
{
    catalogue.add(t);
 }

public boolean existTextbook(String title, String author)
{
    for(int i =0; i<catalogue.Size(); i++){
       Textbook t = catalogue.get(i);
       //you'll want getter and setter methods
       if(t.author.equals(author)&&t.title.equals(title))
           return truel
    }
}

public void deleteTextbook(String title)
{   
    for(int i =0; i<catalogue.Size(); i++){
       Textbook t = catalogue.get(i);
       if(t.title.equals(title)){
          catalogue.remove(i);
       }
    }

}

public String toString()
{
    return catalogue.toString(); 
}
}

祝您编程愉快!如果您有任何问题,请发表评论。