当前位置: 首页 > 知识库问答 >
问题:

基于给定参数以Java打印arraylist的特定元素

谢胤
2023-03-14

我正在处理的任务是基于Author类创建一个arraylist,它的属性是:ID、Author's name、book和Nationity。除此之外,我不得不创建另一个类,它接收ID作为参数,并返回相应的作者信息。我的问题是,代码是我写的,但无论我的输入接收到什么ID,它总是检索到同一个作者的信息。有人能帮我吗?

author.java

public class Author {
    
    private int id;
    private String name;
    private string book;
    private string country;
    
    public Author(int id, String name, String book, String country) {
        this.id = id;
        this.name = name;
        this.book = book;
        this.country = country;
    }
    
    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }
    
    public int getBook() {
        return book;
    }

    public int getCountry() {
        return country;
    }
    
    @Override
    public String toString() {
        return "Id: " + this.id + ", Name: " + this.name + ", Book:" + this.book + ", Country:" + this.country;
    }
}

getAuthor.java(用于根据ID检索作者信息的类)

public class GetAuthor {
    
    public Author returnAuthor(int id, ArrayList<Author> list) {
        
        Author author = null;
        id = 0;
        for (int i = 0 ; i < list.size() ; i++) {
            if(author == null || author(i).getId() == id) {
                author = list.get(i);
                id = list.get(i).getId();
            }
        }
        return author;  
    }
}

main.java

public class Main {

    public static void main(String[] args) {
             
        Author w1 = new Author(1, "Franz Kafka", " The Metamorphosis", "Austria");
        Author w2 = new Author(2, "Neil Gaiman", "Sandman", "England");
        Author w3 = new Author(3, "Jack Kerouac", "On The Road", "USA");

        ArrayList<Author> authors = new ArrayList<>();
        authors.add(w1);
        authors.add(w2);
        authors.add(w3);

        for(int i = 0 ; i < authors.size() ; i++){
            System.out.println(authors.get(i));
            }
        
        Scanner scan = new Scanner(System.in);
        System.out.print("Enter the author's ID: ");

        int num = scan.nextInt();
        
        GetAuthor theAuthor = new GetAuthor();
        Author author = theAuthor.returnAuthor(num,authors);
        
        System.out.println(author);  
    }
}

共有2个答案

狄宗清
2023-03-14
        id = 0;

在这里,您将重写ID的传入值;这可能就是为什么你总是得到相同的答案。

            if(author == null || author(i).getId() == id) {

这甚至不应该编译;author不是方法(在您的示例中)。

龙才俊
2023-03-14

公共静态作者returnAuthor(int id,ArrayList列表){

    return list.stream().filter(auth -> auth.getId()==id).findFirst().orElse(null);
}
 类似资料:
  • 打印出小于给定数N的素数。对于奖励积分,您的解决方案应该在时间或更好的时间内运行。你可以假设N总是一个正整数。 输入样本: 程序应该接受文件名的路径作为其第一个参数。该文件中的每一行都是一个测试用例。每个测试用例将包含一个整数

  • 问题内容: 我如何在arraylist“列表”中打印元素“ e”? 问题答案: 您是要打印整个列表还是要遍历列表的每个元素?两种打印您的类有意义的东西的方法都需要重写该类的方法(如其他答案所述)以返回有效结果。 此代码的输出是:

  • 问题内容: Java中有什么方法可以打印到特定的IPP打印机?我发现所有示例代码和教程都集中在如何使用以下类似内容打印特定类型的文档上: 此代码段仅打印到找到的第一台能够打印文档的打印机。就我而言,我想通过其URI查找打印机,但似乎不支持此功能。我尝试使用,而不是,并添加了一个属性,但这不会返回任何打印机。我怀疑查找服务正在寻找可以更改其目标URI的打印机,而不是寻找具有该URI的打印机。 作为最

  • 如何编写一个递归回溯函数,在该函数中,它打印所有的N位数字,使数字中每3个连续数字的总和正好等于S,其中N小于或等于10,并且是从0到27。 代码: 示例输出: 我很困惑如何递归地写这个。

  • 问题内容: ls命令以以下格式打印时间: 我如何转换,从接收到的时间的这个格式的本地时间? 问题答案: 使用strftime(您需要先转换为): 格式: 这是完整的代码:

  • 我有一个DateTime对象,我想用给定的格式打印它,比方说。 我已经试过了 但是得到了yyyyy-MM-dd,好像格式不被识别。 我也试过了 但是 无法将给定对象格式化为日期java.lang.IllegalArgumentExc0019:无法将给定对象格式化为日期 如何以我选择的格式打印DateTime对象?