Java-一个parseInt显示错误,另一个不显示';T

Java-一个parseInt显示错误,另一个不显示';T,java,arraylist,parseint,Java,Arraylist,Parseint,我一直在做作业,但遇到了一个问题。我的代码从txt文件中扫描一些有关书籍的信息(作者、标题等),然后打印出来。首先我试着打印作者、书名、ISBN代码、页数,然后是书的价格,即15*页数。到目前为止,它仍然有效,但是我想为每本书添加一个数字,所以它就像一个列表。但是当我修改代码添加这些数字时,代码不想扫描它们。上面说 int不能转换为字符串 出于好奇,我尝试将数字扫描为字符串,但随后错误消息显示 无法将字符串转换为int 我的书本课: public class Book { pri

我一直在做作业,但遇到了一个问题。我的代码从txt文件中扫描一些有关书籍的信息(作者、标题等),然后打印出来。首先我试着打印作者、书名、ISBN代码、页数,然后是书的价格,即15*页数。到目前为止,它仍然有效,但是我想为每本书添加一个数字,所以它就像一个列表。但是当我修改代码添加这些数字时,代码不想扫描它们。上面说

int不能转换为字符串

出于好奇,我尝试将数字扫描为字符串,但随后错误消息显示

无法将字符串转换为int

我的书本课:

    public class Book {
    private int number;
    private String author;
    private String title;
    private String code;
    private int pages;
    private static int multiplier = 15;

    public Book(String author, String title, String code, int pages, int number) {
        this.number = number;
        this.author = author;
        this.title = title;
        this.code = code;
        this.pages = pages;
    }

    @Override
    public String toString() {
        return author + " - " + title + ", ISBN:" + code + ", " + pages + " pages, Price: " + price() + "Ft";
    }

    public int price() {
        return multiplier * pages;
    }

    public static int getMultiplier() {
        return multiplier;
    }

    public static void setMultiplier(int multiplier) {
        Book.multiplier = multiplier;
    }

    public int getNumber() {
        return number;
    }


    public String getAuthor() {
        return author;
    }

    public String getTitle() {
        return title;
    }

    public String getCode() {
        return code;
    }

    public int getPages() {
        return pages;
    }

}
和我的“控制器”类:


我可以很好地扫描页面,但它的“数字”有一些问题。

检查您是否以正确的顺序向书本构造函数提供了正确的参数

建造商:

public Book(String author, String title, String code, int pages, int number)
您的对象创建:

new Book(Integer.parseInt(data[0]), data[1], data[2], data[3], Integer.parseInt(data[4]))

你能发现错误吗?

你的输入是:1;J.K.罗琳;《哈利·波特与魔法石》;1782637594826;342

您的构造函数是:

public Book(String author, String title, String code, int pages, int number){
/*.
.
.*/
}
输入的第一个字符是“1”,这是一个整数,但在构造函数中,第一个参数是一个
字符串。这就是错误出现的原因。根据构造函数,“1”必须位于输入的末尾

要为每本书设置一个数字,请使用一个附加的
static
变量,将其初始化为1,每次要添加一本书时,为该书的数字设置静态变量的当前值,然后
++
将其设置为1

public class Book {

private static int counter=1;

private int number;
private String author;
private String title;
private String code;
private int pages;
private static int multiplier = 15;

public Book(String author, String title, String code, int pages, int number) {
    this.number = counter;
    this.author = author;
    this.title = title;
    this.code = code;
    this.pages = pages;
    counter++;
}

祝你好运

没有books.txt如何帮助你?为什么不在解析之前打印出每个数组的内容,自己测试变量呢?或者使用调试器。您似乎试图以错误的顺序传递参数。考虑将每一个解析放在自己的一行上,以便使调试更容易。在解析每个字符串之前,请将其打印出来。检查行在解析之前是否不需要进行
trim()
。我做了,谢谢。但是,现在看起来很好,当我想要运行它时,我得到一个错误,上面写着:“线程中的异常”main“java.lang.NumberFormatException:对于输入字符串:“1”,请尝试为扫描器指定正确的字符集<代码>扫描仪fajlScanner=新扫描仪(新文件(“books.txt”),“UTF-8”)用books.txt上使用的编码替换UTF-8。重新排序构造函数解决了问题,谢谢!但是,当我想运行代码时,我收到一条错误消息,上面说:“线程“main”java.lang.NumberFormatException中的异常:对于输入字符串:“1”“您知道这是什么原因吗?@DewSee当您试图将非整数值设置为整变量时,会出现此错误。仔细检查您的代码,您会发现它。是的,正如我所看到的,问题仍然存在于
Integer.parseInt(数据[0])
。当我只把它作为一个字符串来扫描时,它就工作了,但是将它们作为整数使用会更加优雅和高效。这就是我使用parseInt的原因,但还有其他问题,我就是想不出来。你能给我一些线索吗?@DewSee请看错误消息:
输入字符串:“1”“
。这表示你试图将
1”
存储在一个整数变量中。检查输入,似乎问题出在输入上。我应该有你的全部代码来找出问题的确切位置。实际上问题是,txt文件在“1”之前有一个不可见的点,这就是为什么它不能扫描它。据我所知,这是因为它是UTF-8编码的一种标志。但无论如何,谢谢你的帮助!
public Book(String author, String title, String code, int pages, int number){
/*.
.
.*/
}
public class Book {

private static int counter=1;

private int number;
private String author;
private String title;
private String code;
private int pages;
private static int multiplier = 15;

public Book(String author, String title, String code, int pages, int number) {
    this.number = counter;
    this.author = author;
    this.title = title;
    this.code = code;
    this.pages = pages;
    counter++;
}