-1

我的问题是,如果流派是多个字符,例如:间谍或幽默,我如何使用 char 字段来描述流派。由于 char 只有 1 个字符,这是如何工作的?

我的 Novel 类中需要一个 char 字段,它可以描述小说的类型。

下面是我的代码,后面是我在文件“books.dat”中创建的随机数据

import java.util.ArrayList;
import java.util.Scanner;
import java.io.FileNotFoundException;
import java.io.File;

public class Main {

public static void main(String[] args) throws FileNotFoundException {

    File file = new File("books.dat");
    Scanner s = new Scanner(file);
    ArrayList<Book> books = new ArrayList<Book>();

    while(s.hasNext()){
        if(s.nextInt() == 0){//novels
            //create novel book
            Novel n = new Novel();
            read(s, n);
            n.code = 0;
            Book.totalPages(n.pages);
            books.add(n);
        }

    }

    for(int i = 0; i < books.size(); i++){
        print(books.get(i));
    }
}

public static void read(Scanner sc, Novel no){
        no.name = sc.next();
        no.pages = sc.nextInt();
        no.genre = sc.next().trim().charAt(0); 

//Im having scanner take 
//the first letter of the genre and record it, 
//but there will be a problem when two genres 
//start with the same letter, how can i distinguish between the two?

}


public static void print(Book b){
    if(b.code == 0){
        System.out.printf("Name:%-15s Pages:%-10d Genre:%-10s \n",
            b.getName(), b.getPages() );
    }
}
}




public class Book {

String name;
int pages;
int code;
static int total = 0;

public Book() {
pages = 0;
name = "";
code = -1;
}

public static void totalPages(int pages){
    total += pages;
}

public int getPages(){
    return pages;
}

public String getName(){
    return name;
}

}




public class Novel extends Book {

public char genre;


public Novel(){
}

public char getGenre(){
    return genre;
}
}

0 霹雳弹 245 间谍

0金眼289间谍

1 飞机 456 航空 250

0 诙谐 198 幽默

1 足球 434 体育 400

1 高尔夫 432 运动 307

我想要这个输出:

名称:Thunderball 页数:245 类型:间谍

名称:Goldeneye 页数:289 类型:间谍

名称:飞机 页数:456 主题:航空 插图:250

名称:诙谐页数:198 类型:幽默

名称:足球 页数:434 主题:体育 插图:400

名称:高尔夫 页数:432 主题:体育 插图:307

总页数:2054

4

2 回答 2

1

java中的char只能包含一个字符。在这种情况下有两种选择,

1) 将流派类型从 char 更改为 String,以便它可以容纳多个字符,例如 Humor 等。

2) 将流派类型更改为 char[]

于 2013-10-13T05:49:05.377 回答
0

是的,Scanner 类(您用于阅读)提供了返回 String 的函数nextLine() 。这可能是您正在寻找的。当然,在这种情况下,文件“books.dat”应该以每个标题位于单独的行的方式组织。

实际上我更喜欢DataInputStreamDataOutputStream,它们具有writeUTF()readUTF()用于读/写字符串。

DataInputStream  reader = new DataInputStream(new FileInputStrean(fileName));

然后

int a = reader.readInt();
String genre = reader.readUTF();

ETC

于 2013-10-13T05:56:31.343 回答