Java 如何访问数组中对象的变量?

Java 如何访问数组中对象的变量?,java,printf,Java,Printf,我的任务是创建5个图书对象并存储在一个数组中,我没有问题!我可以用println打印出对象的变量没有问题,但是当我想用printf移动变量时,我不知道如何调用数组中某个元素的特定变量。请帮忙 public class BookReport { public static void main(String[] args){ Book[] TheBooks = new Book[5] ; TheBooks[0] = new Book("Gone W

我的任务是创建5个图书对象并存储在一个数组中,我没有问题!我可以用println打印出对象的变量没有问题,但是当我想用printf移动变量时,我不知道如何调用数组中某个元素的特定变量。请帮忙

public class BookReport {    
    public static void main(String[] args){

        Book[] TheBooks = new Book[5] ;

        TheBooks[0] = new Book("Gone With The Wild", "Paul Mitchell", 1000) ;
        TheBooks[1] = new Book("Harry Toilet", "Donald Trump", 100) ;
        TheBooks[2] = new Book("Huckles Finn Berry", "SpiderMan", 500) ;
        TheBooks[3] = new Book("The Bad Habbit", "Nose Picker", 700) ;
        TheBooks[4] = new Book("Alien", "Mister Green", 600) ;


        System.out.printf("%10s  %20s %18s \n", "Book Title" , "Author", "Pages") ;
        System.out.printf("%s \n", "----------------------------------------------------") ;
        //This works but I cant justify the variables to align!!!
        System.out.println(TheBooks[0]) ;
    }
}


只需调用要打印的各个字段的getter:

System.out.printf("%10s  %20s %18s \n", "Book Title" , "Author", "Pages");
System.out.printf("%s \n", "----------------------------------------------------") ;
for (Book b : TheBooks) {
    System.out.printf("%10s  %20s %18s \n", b.getTitle(), b.getAuthor(), b.getPages());
}

顺便说一句,您将书籍数组命名为
TheBooks
,但Java的惯例是不以大写字母作为第一个字母命名变量。所以
这些书在这里会更好。

如果您想调用数组中某个元素的特定变量。 你可以用

java.util.Map
例如,您可以为所有要存储的对象设置Id

HashMap<String, Book> h = new HashMap<>(); 
Book book = new Book("Gone With The Wild", "Paul Mitchell", 1000);
h.put(book.getTitle(), book); 
book = new Book("Harry Toilet", "Donald Trump", 100); 
h.put(book.getTitle(), book); 
book = new Book("Huckles Finn Berry", "SpiderMan", 500);
h.put(book.getTitle(), book);
book = new Book("The Bad Habbit", "Nose Picker", 700);
h.put(book.getTitle(), book);
book = new Book("Alien", "Mister Green", 600);
h.put(book.getTitle(), book);

// if you want to call it

Book b = h.get("exampletitle);
HashMap h=newhashmap();
Book Book=新书(“乱世佳人”,“保罗·米切尔”,1000);
h、 put(book.getTitle(),book);
书=新书(“哈利厕所”,“唐纳德·特朗普”,100);
h、 put(book.getTitle(),book);
书=新书(“哈克尔斯·芬恩·贝里”,“蜘蛛侠”,500);
h、 put(book.getTitle(),book);
书=新书(“坏习惯”,“捡鼻子者”,700);
h、 put(book.getTitle(),book);
书=新书(“外星人”,“格林先生”,600);
h、 put(book.getTitle(),book);
//如果你想叫它
书b=h.get(“示例标题”);

您还应该能够在toString方法中使用String.format(),这样您就有了一个可重用的格式化版本

@Override
public String toString(){
     return String.format("%10s  %20s %18s \n", title, author, pages);
}

另外,我认为对于包含equals()的类,最好包含hashCode().

不要依赖于
toString
,而是使用
printf
使用您自己的填充和格式设置javafx@xetrasu有点无益。OP仍然需要执行相同的步骤,迭代数组并调用getter(如果他们使用FX)。这就像告诉驾驶福特汽车有困难的人去买法拉利一样相反,我认为这是一个有趣的答案,回答了一个完全不同的问题。我还没有被教过。这个作业在数组章节中。这就是我试图做的。所以b只是用来迭代books@RyanCorry
b
只是一个伪/循环变量。请阅读Java文档中的相关内容。这非常有用!我知道我忘记了如何调用getter!我唯一的问题是名称值不同,因此对于每个循环,我无法调整每个单独的值!我只是单独打印每一行,它们都有各自的调整量!hashCode()是什么在这种情况下,你可能会忽略它。它是每个java.lang.Object上的一个方法,返回一个对哈希表有用的哈希代码整数。你可能会在课程的稍后部分了解它,但如果你有空,我将提供文档链接。通常是这样了解java.lang.Object的一般情况
@Override
public String toString(){
     return String.format("%10s  %20s %18s \n", title, author, pages);
}