2013-10-13 2 views
-1

내 질문은 장르가 여러 문자 (예 : Spy 또는 Humor) 인 경우 장르를 설명하는 데 char 필드를 어떻게 사용합니까? char는 1 문자 밖에 없으므로 어떻게 작동합니까?ArrayLists 및 char 필드

소설의 장르를 설명 할 수있는 소설 수업 내에 char 필드가 필요합니다. 다음은

는 내 코드는 내가

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 항공 "books.dat"파일에 생성 된 임의의 데이터 뒤에 250

0 유성 198 유머

1F ootball (434 개) 스포츠 (400)

1 골프 (432) 스포츠 (307)

나는이 출력을 원하는 :

이름 : 선더 페이지 : 245 장르 : 스파이

이름 : 골든 페이지 : 289 장르 : 스파이

이름 : 비행기 페이지 : 456 주제 : 항공 일러스트 : 250

이름 : Jocularity 페이지 : 198 장르 : 유머

이름 : 축구 페이지 : 434 제목 : 스포츠 일러스트 : 400

이름 : 골프 페이지 : 432 제목 : 스포츠 일러스트 : (307)

총 페이지 : 자바에서 2054

+1

는 이유는'char'해야 않는 등? –

답변

1

문자가 가질 수있는 유일한 한 문자. 이 장르의

2) 변경 유형은 []

를 숯불하는 등 유머 감각 등 여러 문자를 저장할 수 있도록이 경우 2 개 대안, 문자열에 문자에서 장르의

1) 변경 유형이있다

+0

배열로 만드시겠습니까? 그렇다면 각각의 문자를 새로운 배열 인덱스에 저장하겠습니까? – cupojava

+0

char [] 장르에 값 [H, u, m, o, r]이있는 경우 오른쪽. 당신은 색인의 도움으로 문자 가치를 얻을 수 있습니다. 장르 [0]은 'H'로, 장르 [1]은 'u'와 함께 당신을 돌려 줄 것입니다. –

0

네, 독서 용으로 사용하는 스캐너 클래스는 문자열을 반환하는 nextLine() 함수를 제공합니다. 이것은 당신이 찾고있는 것일 수도 있습니다. 물론,이 경우, "books.dat"파일은 각 제목이 별도의 행에있는 방식으로 구성되어야합니다.

는 사실은 내가 된 writeUTF이 그, DataOutputStream 정렬 의 DataInputStream을 선호 (읽기)의 readUTF()/문자열을 작성.

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

다음

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