ArrayLists和char字段

时间:2013-10-13 05:40:59

标签: java polymorphism

我的问题是如果类型是多个字符ex:Spy或Humor,我如何使用char字段来描述类型。由于char只有1个字符,这是如何工作的?

我的小说类中需要一个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 Thunderball 245间谍

0 Goldeneye 289间谍

1架飞机456航空250

0 Jocularity 198幽默

1足球434运动400

1 Golf 432 Sports 307

我想要这个输出:

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

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

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

姓名:Jocularity页数:198类型:幽默

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

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

总页数:2054

2 个答案:

答案 0 :(得分:1)

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

1)将类型从char更改为String,以便它可以包含多个字符,如Humor等。

2)将类型的类型更改为char []

答案 1 :(得分:0)

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

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

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

然后

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