Java 如何使用数组将实例化对象转换为方法的参数

Java 如何使用数组将实例化对象转换为方法的参数,java,arrays,class,constructor,instantiation,Java,Arrays,Class,Constructor,Instantiation,我发现即使我正确地实例化了我的对象,也很难使用我的方法。你知道我哪里出错了吗 示例:我尝试编译java文件,但得到的错误是 “不兼容的类型:无法将字符串转换为书本” 我认为问题在于我的实例化对象被强制转换成字符串,但问题在于我使用了正确的语法来调用字符串。但是,它仍然没有将其作为字符串读取,并表示实例化的对象无法转换为“Books”类 我已经搜索过了,但是他们说这个对象还没有被创建。然而,我检查了我的代码,甚至在将对象放入方法参数之前就已经实例化了对象 我甚至试着用特定的特征来打印对象,结果很好

我发现即使我正确地实例化了我的对象,也很难使用我的方法。你知道我哪里出错了吗

示例:我尝试编译java文件,但得到的错误是

“不兼容的类型:无法将字符串转换为书本”

我认为问题在于我的实例化对象被强制转换成字符串,但问题在于我使用了正确的语法来调用字符串。但是,它仍然没有将其作为字符串读取,并表示实例化的对象无法转换为“Books”类

我已经搜索过了,但是他们说这个对象还没有被创建。然而,我检查了我的代码,甚至在将对象放入方法参数之前就已经实例化了对象

我甚至试着用特定的特征来打印对象,结果很好。所以我猜它会一直上升,直到它被应用到一个方法中

我不明白的一点是,我需要将该对象引用到方法中

这是我的密码:


课堂用书{
字符串类型;
整版;
书籍[]书目;
int bookcounter=0;
//构造函数初始化对象“book”
书籍(整数输入){
如果(输入=1){
this.type=“Math”;
这1.5页=5页;
}
如果(输入=2){
this.type=“Physics”;
这1.5页=9页;
}
如果(输入=3){
this.type=“经济学”;
本页=20页;
}
}
//此方法需要将实例化的对象添加到数组列表中
作废addbooktype(书籍种类){
System.out.println(“您选择:“+kind”);
System.out.println(“添加到列表…”);
书目[图书计数器++]=种类;
}
作废印刷本(){

对于(int i=0;i您的方法addbooktype需要Books类型的参数,而您需要一个String参数

作废addbooktype(书籍种类){

如果您进行以下细微更改,您的代码将正常工作:

void addbooktype(字符串类型){

编辑:根据评论,似乎我误解了代码。尽管如此,以下是您可以做的:

替换

book.addbooktype(booktype);

替换

void addbooktype(Books kind){

    System.out.println("You chose: " + kind);
    System.out.println("Adding to the list...");        

    booklist[bookcounter++] = kind;
}


这会将当前调用的对象添加到数组中,并允许您以后使用它。

问题是您的方法只接受类Book的对象。但是,当您调用该函数时

book.addbooktype(booktype);
book.addbooktype(book);
 ^   and          ^ are same
 |                | 
您正在给它类型String(在book类中,类型是String变量)。若要修复此问题,您需要传递book对象或更改方法本身

传递图书对象:

Books book = new Books(bookchoice);
book.addbooktype(book);
在函数中,你可以这样做

void addbooktype(Books book) {

    System.out.println("You chose: " + book.type);
    System.out.println("Adding to the list...");

    booklist[bookcounter++] = book;
}
(稍后添加)使用此选项:

这种方法也使用对象,但是比上面描述的方法要好。您可以使用java word
This
而不是将对象作为冗余的参数传递

根据java文档

在实例方法或构造函数中,这是对当前对象的引用—调用其方法或构造函数的对象。您可以使用此引用从实例方法或构造函数中引用当前对象的任何成员

所以当你调用函数

book.addbooktype(booktype);
book.addbooktype(book);
 ^   and          ^ are same
 |                | 
方法内部
addbooktype

void addbooktype(Books book) {
   this and book would also be same. 
}
所以你可以这样做

book.addbooktype();
addbooktype

void addbooktype() {

    System.out.println("You chose: " + this.type);
    System.out.println("Adding to the list...");

    booklist[bookcounter++] = this;
}
public int compareTo(Book book) {
   Now here this would be book1 
   and book would be book2

   Also keep in mind this.type would be same as type. type and this.type are both 
   referring to same object i.e who we called function on (book1).  
}
例如,当您必须比较对象时,传递对象和这将非常有用。假设您有两个对象book1和book2。您可以这样做

int compareResult = book1.compareTo(book2);
你的方法是

void addbooktype() {

    System.out.println("You chose: " + this.type);
    System.out.println("Adding to the list...");

    booklist[bookcounter++] = this;
}
public int compareTo(Book book) {
   Now here this would be book1 
   and book would be book2

   Also keep in mind this.type would be same as type. type and this.type are both 
   referring to same object i.e who we called function on (book1).  
}
更改功能:

或者你可以像这样更改函数,尽管我建议你传递对象本身。如果你只传递字符串,你将无法将其存储在
Books[]booklist

void addbooktype(String type) {
    System.out.println("You chose: " + type);
    System.out.println("Adding to the list...");        

    // The line below will give error unless you change Books[] booklist;
    // to  String[] booklist;
    booklist[bookcounter++] = kind; 
}

一个类应该代表一些东西。你的
Book
类是代表一本书还是一个书的列表?我想说的是它代表一个书的列表,这就是为什么我包括了一个“books[]booklist”数组。还是它错了?
Book.Type
只是字符串。您需要传递对象本身,即
Book
或更改方法以接受
String
。然后它不应该有
Type
pages
字段,因为书籍列表没有“Type”,也没有“pages”。我认为您需要将该类重命名为
BookList
,并将
type
pages
移动到一个新类
Book
。欢迎使用StackOverflow。如中所述,该网站是一个有用问题及其答案的存储库,而不是教程网站或帮助/讨论论坛。我担心您有一些基本的错误了解一些基本概念,如类、类型和实例,不幸的是,这并不是一个真正的教程“论坛”。请参加,访问,特别是阅读,学习如何有效地使用此网站。但他正试图将其添加到
书籍
的类型数组中,这将如何解决他的问题?他真的只需要为
列表
和一本
书籍
设置两个单独的类。这很有效!!但是,我很困惑,不是吗我们应该放类的引用而不是数据类型?这就是为什么我放类“Books”而不是“string”。我认为这种约定只适用于构造函数而不是方法。嘿,我以前的解决方案可能会起作用,但在以后的阶段会导致问题。请在编辑后尝试该解决方案。我在该解决方案中使用类的引用。Kind不可用作字段。我可以建议进行新的编辑吗?我尝试了,它一直工作到它所在的行添加到数组中。它显示的“字符串”无法转换为books,但我认为该值已经存在于方法中,它只是拒绝将其添加到数组中。@Zidane101我已将答案更新为incl