【问题标题】:Searching Item ArrayList by Property按属性搜索项 ArrayList
【发布时间】:2017-07-31 12:16:51
【问题描述】:

我有一个包含 3 个属性、优先级 #、描述和参考 # 的对象/项目的 ArrayList。该程序假设允许您根据项目的引用 # 从 Arraylist 打印项目。出于某种原因,编译器不会让我遍历 ArrayList 来查找匹配项。 我坚持的部分(在方法'findbyrefer'中):

for(Object list : list.getMyList()){
                if(list.getReference.equals(num)){
                    System.out.println(list);
                }     

我的主要:

public class Main {
public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner myscanner = new Scanner(System.in);
    boolean exit = false;
    boolean error = false;
    boolean error1 = false;

    String input = "";
    int num = 0;
    System.out.println("Welcome to Your To-Do List!\n1 = Create New Item \n2 = Exit \n3 = Display Item \n4 = Delete Item");

    while(exit == false){
    Item item = new Item();
    do{
        try {
            System.out.println("Enter a command ");
            input = myscanner.nextLine();
            num = Integer.parseInt(input);
            if(num ==  1){
                item.reference();
                System.out.println("Reference: "+ item.getReference() + "\nDescription: " + item.getDescription() + "\nPriority: " + item.getPriority());
                error = true;
            }
            /**
             * This creates the item
             */
            else if(num == 2){
                exit = true;
                System.out.println("Bye"); break;
            }
            else if(num == 3){
                item.findbyrefer();
                /**
                 * This is the part I'm stuck at
                 */
            }
            else{
                error = true;
                System.out.println("invalid");
            }
        }
        catch(Exception e){
            System.out.println("invalid input");
            error = true;
        }
    }
    while(error);   
    }
}

我的物品类别:

 public class Item {
private Scanner myScanner;
private int reference;
private String description;
private int priority;
List list = new List();

public void setReference(int reference) {
    this.reference = reference;
}
public int getReference() {
    return reference;
}
public void setDescription(String description) {
    this.description = description;
}
public String getDescription() {
}
public void setPriority(int priority) {
    this.priority = priority;
}
public int getPriority() {
    return priority;
}

public void reference(){
    boolean error = false;
    int x = 0;
    do{
        try{
            System.out.println("Assign this item with a reference number: ");
            myScanner = new Scanner(System.in);
            x=myScanner.nextInt();
            setReference(x);
            error=false;
            break;
        }
        catch(Exception e){
            error = true;
            System.out.println("invalid");
        }
    } while(error);
    description();
}

public void description(){
    boolean error = true;
    while(error){
        try{
            System.out.println("Enter the description: ");
            myScanner = new Scanner(System.in);
            String input = myScanner.nextLine();
            setDescription(input);
            error=false;
            break;
        }
        catch(Exception e){
            error = true;
            System.out.println("invalid");
            break;
        }
    }
    priority();
}

public void priority(){
    boolean error = false;
    do{
        try{
            System.out.println("Assign this item with a priority number: ");
            myScanner = new Scanner(System.in);
            setPriority(myScanner.nextInt());
            error=false;
        }
        catch(Exception e){
            error = true;
            System.out.println("invalid");
        }
    }
    while(error==true);
    list.addItem(this);
    System.out.println(list.getMyList());
}
public void findbyrefer(){
    boolean error1 = false;
    String input = "";
    int num = 0;
    do{
        try{
            System.out.println("Enter the reference number of the item you want to show");
            myScanner = new Scanner(System.in);
            input = myScanner.nextLine();
            num = Integer.parseInt(input);
            for(Object list : list.getMyList()){
                if(list.equals(num)){
                    System.out.println(list);
                }
                else{
                    System.out.println("not working");
                }
            }
        }
        catch(Exception e){
            error1 = true;
            System.out.println("invalid");
        }
    }
    while(error1 = true);
}

} 我的列表类包含我的实际 ArrayList:

public class List {
public ArrayList<Object> MyList = new ArrayList<Object>();

public void setMyList(ArrayList<Object> myList) {
    this.MyList = myList;
}
public ArrayList<Object> getMyList() {
    return MyList;
}

public void addItem (Object t){
    getMyList().add(t);
    }

【问题讨论】:

    标签: java oop arraylist


    【解决方案1】:

    Object 上没有 getReference 方法。

    由于您的 ArrayList 包含 Items,请让它知道:

    ArrayList<Item> myList = new ArrayList<>();
    // ------^^^^^^
    

    现在看看你的循环:

    for(Object list : list.getMyList()){
        if(list.getReference.equals(num)){
            System.out.println(list);
        }
    }
    

    我们需要:

    1. Object 更改为Item
    2. 为项目使用不同于list 的标识符(只是为了避免混淆)
    3. 致电getReference(加()
    4. 使用==,而不是equals,检查numequals 用于对象)

    所以:

    for (Item item : list.getMyList()) {
        if (item.getReference() == num){
            System.out.println(item);
        }
    }
    

    【讨论】:

    • 这是为了帮助您入门。肯定会有其他后续问题,彻底的代码审计对于 SO 来说是题外话。但是,如果您遇到更多问题,请仔细阅读错误消息、进行研究、查看 Java 书籍和教程等。如果您真的卡住了,请发布一个关于您卡住的具体问题的新问题使用minimal reproducible example(注意“Minimal”)展示该特定问题。
    【解决方案2】:

    为list的getReference方法添加()括号,并使用(==)等号运算符。

     for(Object list : list.getMyList()){
             if(list.getReference() == num)){
                System.out.println(list);
             }
    }
    

    【讨论】:

    • 这是一个的问题。
    猜你喜欢
    • 2016-05-29
    • 1970-01-01
    • 2015-05-01
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 2014-12-19
    • 2011-10-17
    相关资源
    最近更新 更多