首页 > 解决方案 > 从 fileScan 参数创建对象

问题描述

我正在努力正确执行此代码。一切似乎都有效,除了我调用 addBook 函数的地方。我正在尝试传入 CSV 并对其进行初始化。

public void addBook(Book book) {
    books[currIndex] = book;
    currIndex++;
}   

public void setNumBooks(int num) {
     //how many books
    numBooks = num;
    books = new Book[numBooks]; //init array
    }

下一个功能是我遇到问题的地方

public void addBooksFromFile(String filename) {
    File f = new File(filename);
    

    try{
        Scanner fileScan = new Scanner(f); //set semi colon delimiter
        numBooks = fileScan.nextInt();
        setNumBooks(numBooks);
        String line;

        while(fileScan.hasNextLine())
            line = fileScan.nextLine();
            String[] splitArray = line.split("; ");

            for(int i = 0; i < splitArray.length; i++){

                //addBook();
            }          
    }
    catch (IOException e) //input output exception 
    {
        System.out.println(e);
    }
}

当我尝试传递 splitArray[i] 时,它表明字符串与书不兼容,这是有道理的。我该如何解决这个问题才能正常工作?

标签: javaarraysobject

解决方案


您的难题的具体解决方案高度依赖于Book类的实现。

Java 是一种强类型语言,因此您必须遵守该方法期望作为参数的参数类型。

splitArray[i] // this return a String, which is not a Book

假设您的 Book 课程如下所示:

public class Book {
    
    final String text;

    public Book(String text) {
        this.text = text;
    }
}

您的 for 循环迭代应更改为以下内容:

            for(int i = 0; i < splitArray.length; i++){
                final Book book = new Book(splitArray[i]);
                addBook(book);
            }  

推荐阅读