2012-03-08 22 views
0

コードの最後にあるように、私はprintLinkメソッドを呼び出す "list.printList"を使用します。代わりに、 "book name:... book author:.. etc."を出力する必要があります。これは、生のテキストファイルデータを表示します。何が間違っているのですか?また、どんな提言も歓迎します。おかげJavaプログラム:メソッドを使用して印刷しないでください

はEDIT:これはテキストファイルの内容です:

antrea ggfg 65 64 
antrea ggfg 65 64 
antrea ggfg 65 64 
antrea ggfg 65 64 

これが出力されます。

antrea ggfg 65 64 
antrea ggfg 65 64 
antrea ggfg 65 64 
antrea ggfg 65 64 

また、私はトークナイザに何か問題があると考えています。あなたの経験から、以下に書いておくべきことは何でしょうか?

import java.io.* ; 
import java.util.* ; 

class Link 
{ 
    public String isbn ; 
    public String bookName ; 
    public String bookAuthor ; 
    public String publicYear; 
    public Link nextLink; 

    public Link() 
    { 

    } 
    //Link constructor 
    public Link(String bookNameIn, String bookAuthorIn, String isbnIn, String publicYearIn) 
    { 
     setIsbn (isbnIn) ; 
     setBookName (bookNameIn) ; 
     setBookAuthor (bookAuthorIn) ; 
     setPublicYear (publicYearIn) ; 
     //isbn = isbnIn ; 
     //bookAuthor = bookAuthorIn ; 
     //publicYear = publicYearIn ; 
    } 

    // Set Methods 
    public void setIsbn(String isbnIn) 
    { 
     isbn = isbnIn ; 
    } 

    public void setBookName(String bookNameIn) 
    { 
     bookName = bookNameIn ; 
    } 

    public void setBookAuthor(String bookAuthorIn) 
    { 
     bookAuthor = bookAuthorIn ; 
    } 

    public void setPublicYear(String publicYearIn) 
    { 
     publicYear = publicYearIn ; 
    } 

    // Get Methods 
    public String getIsbn() 
    { 
     return isbn ; 
    } 

    public String getBookName() 
    { 
     return bookName; 
    } 

    public String getBookAuthor() 
    { 
     return bookAuthor ; 
    } 

    public String getPublicYear() 
    { 
     return publicYear ; 
    } 

    //Print Link data 
    public void printLink() 
    { 
      System.out.print("Book Name: " + getBookName() + "\n" + "Book's Author: " + getBookAuthor() + "\n" + "Year Published: " + getPublicYear() + "\n" + "ISBN: " + getIsbn() +"\n"); 
      System.out.println("") ; 
    } 
} 

class LinkList 
{ 

    private Link first; 

    //LinkList constructor 
    public LinkList() 
    { 
      first = null; 
    } 

    //Returns true if list is empty 
    public boolean isEmpty() 
    { 
      return first == null; 
    } 

    //Inserts a new Link at the first of the list 
    public void insert(String bookNameIn, String bookAuthorIn, String isbnIn, String publicYearIn) 
    { 
      Link link = new Link(bookNameIn, bookAuthorIn, isbnIn, publicYearIn) ; 
      link.nextLink = first; 
      first = link; 
    } 

    //Deletes the link at the first of the list 
    public Link delete() 
    { 
      Link temp = first; 
      first = first.nextLink; 
      return temp; 
    } 

    //Prints list data 
    public void printList() 
    { 
      Link currentLink = new Link() ; 
      currentLink = first; 
      while(currentLink != null) { 
        currentLink.printLink(); 
        currentLink = currentLink.nextLink; 
      } 
      System.out.println(""); 
    } 
} 

public class TheList 
{ 
    public static void main(String[] args) throws Exception 
    { 
      //Scanner kb = new Scanner (System.in); 
      LinkList list = new LinkList(); 
      File outputFile ; 
      //int numberOfBooks = 0 ; 

     // Create the new text file. If exists, it will continue to the next commands 
      do 
      { 
       outputFile = new File("db.txt") ; 

        if(!outputFile.exists()) 
        { 
         outputFile.createNewFile();      
         System.out.println("The file was created as db.txt"); 
         System.out.println(""); 
        } 

      }while (!outputFile.exists()) ; 

      try 
      { 
       // Define which file to stream in from 

       FileInputStream fileIn = new FileInputStream("db.txt") ; 
       DataInputStream input = new DataInputStream (fileIn) ; 
       BufferedReader br = new BufferedReader (new InputStreamReader (input)) ; 
       String line ; 

       // Read each line of the file 

       while ((line = br.readLine()) != null) 
       { 
        // insert code to break input to pieces 
        StringTokenizer tokenizer = new StringTokenizer(line) ; 
        while (tokenizer.hasMoreElements()) 
        { 
         Link record = new Link() ; 
         record.setBookName(tokenizer.nextToken()) ; 
         record.setBookAuthor(tokenizer.nextToken()) ; 
         record.setIsbn(tokenizer.nextToken()) ; 
         record.setPublicYear(tokenizer.nextToken()) ; 
        } 
        System.out.println (line) ; 
       } 

       input.close() ; 
      }catch (Exception e){ 
       System.err.println("Error. Could not read the file") ; 
      } 
      list.printList(); 


      /**list.insert(123456, "kostis", "kostis", 1900); 
      list.insert(123456, "kostis", "kostis", 1900); 
      list.insert(123456, "kostis", "kostis", 1900); 
      list.insert(123456, "kostis", "kostis", 1900); 
      list.insert(123456, "kostis", "kostis", 1900); 
      **/ 



    } 
} 
+1

あなたのリストにあなたのレコードを追加していますか?私はその部分を見つけていない。 – tom

+0

あなたが印刷するものを投稿することができます、生のテキストファイルのデータです。 –

答えて

0

私はあなたが私がprintList()方法は、単一の空行を印刷すると仮定ので、リストには何も入れて表示されません。

System.out.println (line) ; 

私はあなたがあなたの読書コードは(私が疑うが、内側の中には、/必要であるべきでしょう)このような何かになりたいと仮定します:

生のテキストファイルのデータは、このラインから来ているようだ

while ((line = br.readLine()) != null) 
{ 
    // insert code to break input to pieces 
    StringTokenizer tokenizer = new StringTokenizer(line) ; 
    while (tokenizer.hasMoreElements()) 
    { 
    String bookName = tokenizer.nextToken(); 
    String author = tokenizer.nextToken(); 
    String isbn = tokenizer.nextToken(); 
    String year = tokenizer.nextToken(); 

    list.insert(bookName, author, isbn, year) ; 
    } 
    System.out.println (line) ; 
} 

また、これは奇妙に思える:

Link currentLink = new Link() ; 
currentLink = first; 

なぜだけではなく、FO遅い?

Link currentLink = first; 

その他のスタイルの問題もありますが、今はコメントしません。

+0

あなたは正しいです。私はSystem.out.println(行)を見ませんでした。私はそれを削除し、今は何も印刷しません。 –

+0

@SergiosSchizasはい、それはリストに何も追加しないためです。可能な解決策については、私の更新を参照してください。あなたのコードには多くの書体/デザインの問題があり、リファクタリングが必要なので、提案されたソリューションが完璧であるとは期待していません。 – Thomas

+0

ありがとう!あなたはとても助けになりました! –

0

あなたはただ

list.printList(); 

行は何もしませんので、あなたがリストにレコードを追加することはありません

System.out.println (line) ; 

を印刷しています。 whileループでは、レコードをリストに追加する必要があります。

while (tokenizer.hasMoreElements()) 
{ 
     Link record = new Link() ; 
     record.setBookName(tokenizer.nextToken()) ; 
     record.setBookAuthor(tokenizer.nextToken()) ; 
     record.setIsbn(tokenizer.nextToken()) ; 
     record.setPublicYear(tokenizer.nextToken()) ; 
} 

は次のようになります。

while (tokenizer.hasMoreElements()) 
    { 
     list.insert(values go here); 
    } 
0

あなたの問題はここにある:

   while ((line = br.readLine()) != null) 
       { 
        // insert code to break input to pieces 
        StringTokenizer tokenizer = new StringTokenizer(line) ; 
        while (tokenizer.hasMoreElements()) 
        { 
         Link record = new Link() ; 
         record.setBookName(tokenizer.nextToken()) ; 
         record.setBookAuthor(tokenizer.nextToken()) ; 
         record.setIsbn(tokenizer.nextToken()) ; 
         record.setPublicYear(tokenizer.nextToken()) ; 
        } 
        System.out.println (line) ; 
       } 

あなたはそれを移入、レコードごとにnew Link()を作成している、とリストに追加しないでください。あなたがそこにSystem.out.println(line);を持っているので、それは生データを印刷します。

関連する問題