【问题标题】:Java - One parseInt shows error, the other one doesn'tJava - 一个 parseInt 显示错误,另一个没有
【发布时间】:2016-10-11 18:52:12
【问题描述】:

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

int不能转成String

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

字符串不能转换为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 class Controller {

void start() {
    scanning();
    printing("Avilable books: ");        


}

private List<Book> books = new ArrayList<>();


private void scanning() {

    try {
        Scanner fajlScanner = new Scanner(new File("books.txt"));
        String row;
        String data[];
        while (fajlScanner.hasNextLine()) {

            row = fajlScanner.nextLine();
            data = row.split(";");
            //1;J.K. Rowling;Harry Potter and the Philosopher's Stone;1782637594826;342
            //this line below gives the error for the data[0]
            books.add(new Book(Integer.parseInt(data[0]), data[1], data[2], data[3], Integer.parseInt(data[4])));

        }

    } catch (FileNotFoundException ex) {
        Logger.getLogger(Controller.class.getName()).log(Level.SEVERE, null, ex);
    }

}

private void printing(String title) {
    System.out.println(title);
    for (Book book : books) {
        System.out.println(book);

    }
}
}

我的txt内容:

1;J.K. Rowling;Harry Potter and the Philosopher's Stone;1782637594826;342
2;J.R.R. Tolkien;The Fellowship of the Ring;1827493762573;431
3;Stephen King;Needful Things;8274653821647;411
4;Eric Knight;Lassie Come-Home;7263845618293;138
5;Molnár Ferenc;A pál utcai fiúk;9283746192846;194
6;Winston Groom;Forrest Gump;0385231342;228
7;Antoine de Saint-Exupéry;The Little Prince;8362748172649;69
8;Stephen King;Cujo;2918467382914;362

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

【问题讨论】:

  • 没有books.txt怎么办?为什么不打印出每个数组的内容 before 解析来自己测试变量?或者使用调试器。
  • 您似乎试图以错误的顺序传递参数。
  • 考虑将每个解析放在自己的一行上——以使调试更容易。在解析之前打印出每个字符串。在解析之前检查这些行不需要trim()'ed。

标签: java arraylist parseint


【解决方案1】:

检查您是否以正确的顺序将正确的参数提供给 Book-constructor。

构造函数:

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]))

你能发现错误吗?

【讨论】:

  • 我做到了,谢谢。现在看起来很好,但是,当我想运行它时,我收到一条错误消息:“线程“main”中的异常 java.lang.NumberFormatException:对于输入字符串:“1””
  • 尝试为扫描仪指定正确的字符集。 Scanner fajlScanner = new Scanner(new File("books.txt"), "UTF-8"); 将 UTF-8 替换为 books.txt 中使用的编码。
【解决方案2】:

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

你的构造函数是:

public Book(String author, String title, String code, int pages, int number){
/*.
.
.*/
}

输入的第一个字符是“1”,它是一个整数,但在您的构造函数中,第一个参数是String。这就是错误出现的原因。根据构造函数,“1”必须在输入的末尾。

为每本书设置一个数字,使用一个额外的static变量,将它初始化为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++;
}

祝你好运

【讨论】:

  • 重新排序构造函数解决了问题,谢谢!但是,当我想运行代码时,我收到一条错误消息:“线程“main”中的异常 java.lang.NumberFormatException:对于输入字符串:“1””你是什么原因造成的?
  • @DewSee 当您尝试将非整数值设置为整数变量时,会出现此错误。仔细检查你的代码,你会找到的。
  • 是的,正如我所见,问题仍然在于Integer.parseInt(data[0])。当我仅将其作为字符串进行扫描时,它可以工作,但将它们用作整数会更加优雅和高效。这就是我使用 parseInt 的原因,但还有别的问题,我就是想不通。你能给我更多的线索吗?
  • @DewSee 查看错误信息:For input string: "1"" 。意思是您试图将1" 存储在一个整数变量中。检查输入,似乎问题出在输入中。我应该有你的整个代码来找出问题到底出在哪里。
  • 其实问题是,txt文件的“1”前有一个看不见的点,所以无法扫描。据我所知,这是因为它是 UTF-8 编码的一种标记。但无论如何,谢谢你的帮助!
猜你喜欢
  • 2012-10-06
  • 2023-03-20
  • 2017-03-21
  • 2021-09-21
  • 1970-01-01
  • 2015-04-20
  • 2020-08-31
  • 2021-11-07
  • 1970-01-01
相关资源
最近更新 更多