Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
爪哇语;无法强制转换为java.lang.String;_Java - Fatal编程技术网

爪哇语;无法强制转换为java.lang.String;

爪哇语;无法强制转换为java.lang.String;,java,Java,我正在尝试创建一个列表,并将我的书籍数组输出到该列表中,让用户能够单击其中一本书来租用它。该列表工作并输出所有书籍,但当我单击一本书并选择OK时,它会显示错误“线程中的异常”main“java.lang.ClassCastException:书籍无法转换为java.lang.String”。有人能给我解释一下这个错误是什么,以及我如何修复它吗 public static void CustomerBooks() throws IOException { Object[] Menu = {

我正在尝试创建一个列表,并将我的书籍数组输出到该列表中,让用户能够单击其中一本书来租用它。该列表工作并输出所有书籍,但当我单击一本书并选择OK时,它会显示错误“线程中的异常”main“java.lang.ClassCastException:书籍无法转换为java.lang.String”。有人能给我解释一下这个错误是什么,以及我如何修复它吗

public static void CustomerBooks() throws IOException {
    Object[] Menu = {
            "Option1",
            "Option2",
            "Option3",
            "Option4"
    };
    String userChoice = (String) JOptionPane.showInputDialog(null, "Welcome", "Book Menu", JOptionPane.QUESTION_MESSAGE, null, Menu, null);
    if (userChoice.equals("Option1")) {} else if (userChoice.equals("Option2")) {
        File myFile = new File("books.txt");
        Scanner inputFile = new Scanner(myFile);
        Books[] bookArray = new Books[200];
        String str;
        while (inputFile.hasNext()) {
            str = inputFile.nextLine();
            String[] myData = str.split("#");
            Books.addBook(bookArray, Books.getBookCount(), myData[0], myData[1], myData[2]);
        }
        inputFile.close();
        String userChoice1 = (String) JOptionPane.showInputDialog(null, "Books List", "Books", JOptionPane.QUESTION_MESSAGE, null, bookArray, null);
        JOptionPane.showMessageDialog(null, "You chose: " + userChoice1); {
            System.exit(0);
        }
    }

不确定到底是什么问题,你没有发布你的
课程。 通常,每个类都内置了一个
toString()
函数,但这不一定适合您的类。 我建议重写
类中的
toString()
函数。 像这样的

@override
public String toString(){
  // assign result to your intended string
  return result;
}

不确定到底是什么问题,你没有发布你的
课程。 通常,每个类都内置了一个
toString()
函数,但这不一定适合您的类。 我建议重写
类中的
toString()
函数。 像这样的

@override
public String toString(){
  // assign result to your intended string
  return result;
}
java中有一个
toString()
方法,可以在任何对象上调用。但是,如果你想根据你的
的特点得到这个方法的适当行为,你应该像在Ibukun的答案中那样覆盖它

铸造概念用于获得更具体类型的对象。因此,由于这本书不是
字符串
实例,因此在运行时会得到
ClassCastException

java中有一个
toString()
方法,可以在任何对象上调用。但是,如果你想根据你的
的特点得到这个方法的适当行为,你应该像在Ibukun的答案中那样覆盖它


铸造概念用于获得更具体类型的对象。因此,由于这本书不是
字符串的
实例,因此在运行时会出现
类异常

public static void main(String[] args) {
    Book[] ani = new Book[]{new Book(), new Book()};
    String usi = (String) JOptionPane.showInputDialog(null, "Books", "Books", JOptionPane.QUESTION_MESSAGE, null, ani, null);
}

不要忘记一件事,
showInputDialog
重载
从传入参数的数组返回choosen对象(这里是
书籍

您当然希望从返回的
对象中分配
toString()
getName()


解决方案
在这里,我再现了同样的行为

public static void main(String[] args) {
    Book[] ani = new Book[]{new Book(), new Book()};
    String usi = (String) JOptionPane.showInputDialog(null, "Books", "Books", JOptionPane.QUESTION_MESSAGE, null, ani, null);
}

不要忘记一件事,
showInputDialog
重载
从传入参数的数组返回choosen对象(这里是
书籍

您当然希望从返回的
对象中分配
toString()
getName()


解决方案
请花时间适当缩进代码,并删除多余的垂直空格。代码比目前需要的更难阅读。我还建议把它减少到一个新的水平。从根本上说,这听起来像是您试图将对
Book
类型的对象的引用强制转换为
String
,但这是行不通的。
java.lang.ClassCastException:Books不能强制转换为java.lang.String
我假设此异常发生在代码的另一部分中。。。堆栈跟踪会有帮助。
if(userChoice.equals(“Option1”){}否则如果(userChoice.equals(“Option2”){
只要删除第一个条件,它是多余的:
if(userChoice.equals(“Option2”)){
。请花点时间适当缩进代码,并删除过多的垂直空白。代码比现在更难阅读。我还建议将其减少为。从根本上说,这听起来像是试图将对
Book
类型的对象的引用转换为
String
,这就是just不起作用。
java.lang.ClassCastException:Books不能强制转换为java.lang.String
我假设此异常发生在代码的另一部分…堆栈跟踪会有所帮助。
if(userChoice.equals(“Option1”){}else如果(userChoice.equals(“Option2”){
只需删除第一个条件,它是多余的:
if(userChoice.equals(“Option2”){