2016-10-11 30 views
-1

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

INT不能转换为字符串

我试图扫描数字作为字符串是出于好奇,但随后的错误消息说,

字符串不能转换到诠释

的My Book等级:

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 

我可以扫描网页不错的,但它有一些问题与 “数字”。

+0

如何帮助没有books.txt?为什么不在**解析之前打印出每个数组**的内容**以便为自己测试变量?或者使用调试器。 –

+0

你似乎试图以错误的顺序传递参数。 – user2357112

+1

考虑将每个解析放在它自己的一行上 - 以便于调试。在解析之前打印出每个字符串。检查在分析之前,行不需要“trim()”。 –

回答

1

您的输入是: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++; 
} 

好运

+0

重新排序构造函数解决了问题,谢谢! 但是,当我想运行代码时,我收到一条错误消息: “线程中的异常”main“java.lang.NumberFormatException:对于输入字符串:”1“” 你是什么原因造成这种情况的? – DewSee

+0

@DewSee当您尝试将非整数值设置为整数变量时,会显示此错误。仔细检查你的代码,你会发现它。 – HMD

+0

是的,正如我看到的问题仍然是'Integer.parseInt(data [0])'。当我只将它作为一个字符串进行扫描时,它可以工作,但将它们作为整数使用会更加优雅和高效。这就是为什么我使用parseInt,但其他问题是这个问题,我无法弄清楚。你能给我更多的线索吗? – DewSee

2

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

构造:

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

你能找出错误?

+0

我做了,谢谢。现在看来很好,但是,当我想运行它,我得到一个错误说: “线程中的异常”main“java.lang.NumberFormatException:对于输入字符串:”1“” – DewSee

+0

尝试指定正确的字符集扫描仪。 '扫描仪fajlScanner =新扫描仪(新文件(“books.txt”),“UTF-8”);' 用books.txt中使用的编码替换UTF-8。 – user41991

相关问题