0

私はこれをつなぎ合わせるのに大きな問題を抱えています。基本的な読み取りおよび書き込み機能があります。必要なのは、ファイル'Books.txt'からの入力をチェックして、次のようにすることです。

  • ISBNは有効です
  • CopyNumber、Year、Statisticsは数値である必要があります
  • タイトル、著者、出版社には値が含まれている必要があります
  • BorrowDateは有効な日付である必要があります
  • ReturnDate(利用可能な場合)は有効な日付である必要があります
  • LibraryCardNumberは、使用可能な場合は数値である必要があります。

本を借りていない場合、最後の2つのフィールドは存在しません。

'Books.txt'からの2つのサンプル行:

9780140455168#2#The Twelve Caesars#Suetonius#Penguin Classics#2007#3#101009#101030#5478
9780141188607#1#Claudius the God#Robert Graves#Penguin Classics#2006#2#080123

エラー行は、誤ったISBNなどのエラーメッセージとともに「ErrorLines.txt」に書き込む必要があります。エラーのない本は、著者名でソートされた「NewBooks.txt」に書き込む必要があります。

これが私がこれまでに得たものです。完全な解決策を探しているわけではありません。明らかに道のりは遠いのですが、誰かが私にいくつかの指針を教えてくれるように親切にしてくれれば、私は非常に感謝します!そして、はい、それは宿題です:D

入力を検証するためにtryループを作成する必要がありますか...?

ライブラリクラス:

import java.util.ArrayList;
import java.util.*;
import java.io.*;
import java.io.IOException;

public class Library {

public void readFromFile (String filename) throws IOException {

String inLine;
File inFile;

    inFile = new File("Books.txt");
    BufferedReader fIn = new BufferedReader(new FileReader(inFile));

        inLine = fIn.readLine();
        while (inLine != null) {
            inLine = fIn.readLine();
            aBookList.add(inLine + "\n");
        }
        fIn.close();
    }

public void writeToFile (String fileName) throws IOException {

    BufferedWriter bw = null;
        try {
            bw = new BufferedWriter(new FileWriter(fileName));

            bw.write("???"); //Dont know what to put here...
            bw.newLine();
        } catch (IOException e) {
            System.out.println("Error writing file.");
        } finally {
            bw.close();
        }
    }

 public static boolean isISBN13Valid(isbn) {
        int check = 0;
        for (int i = 0; i < 12; i += 2) {
            check += Integer.valueOf(isbn.substring(i, i + 1));
        }
        for (int i = 1; i < 12; i += 2) {
            check += Integer.valueOf(isbn.substring(i, i + 1)) * 3;
        }
        check += Integer.valueOf(isbn.substring(12));
        return check % 10 == 0;
    }
}

そして、これが本のクラスです:

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

public class Book {
Book b = new Book();
private static ArrayList<String> aBookList = new ArrayList<String>();

private String Isbn;
private int CopyNumber;
private String Title;
private String Author;
private String Publisher;
private int Year;
private int Statistics;
private String BorrowDate;
private String ReturnDate;
private int LibraryCardNumber;

public void bookInfo (String nIsbn, int nCopyNumber, String nTitle, String nAuthor, String nPublisher, int nYear,
        int nStatistics, String nBorrowDate, String nReturnDate, int nLibraryCardNumber) {

    Isbn = nIsbn; 
    CopyNumber = nCopyNumber; 
    Title = nTitle; 
    Author = nAuthor; 
    Publisher = nPublisher; 
    Year = nYear;
    Statistics = nStatistics; 
    BorrowDate = nBorrowDate; 
    ReturnDate = nReturnDate; 
    LibraryCardNumber = nLibraryCardNumber;
}

public void bookInfo (String Row) {
    StringTokenizer sT = new StringTokenizer(Row);
    Isbn = sT.nextToken("#");
    CopyNumber = Integer.parseInt(sT.nextToken("#") );
    Title = sT.nextToken("#");
    Author = sT.nextToken("#");
    Publisher = sT.nextToken("#");
    Year = Integer.parseInt(sT.nextToken("#") );
    Statistics = Integer.parseInt(sT.nextToken("#") );
    BorrowDate = sT.nextToken("#");
    ReturnDate = sT.nextToken("#");
    LibraryCardNumber = Integer.parseInt(sT.nextToken("#") );
}
public void setIsbn(String nIsbn) {
    Isbn = nIsbn;       
}
public void setCopynumber(int nCopyNumber) {
    CopyNumber = nCopyNumber;       
}
public void setTitle(String nTitle) {
    Title = nTitle;     
}
public void setAuthor(String nAuthor) {
    Author = nAuthor;       
}
public void setPublisher(String nPublisher) {
    Publisher = nPublisher;     
}
public void setYear(int nYear) {
    Year = nYear;       
}
public void setStatistics(int nStatistics) {
    Statistics = nStatistics;       
}
public void setBorrowDate(String nBorrowDate) {
    BorrowDate = nBorrowDate;       
}
public void setReturnDate(String nReturnDate) {
    ReturnDate = nReturnDate;
}
public void setLibraryCardNumber(int nLibraryCardNumber) {
    LibraryCardNumber = nLibraryCardNumber;
}

 public String getAll () {
    String s = " ";
    return (Isbn + s + CopyNumber + s + Title + s + Author + s + Publisher + s +
                   Year + s + Statistics + s + BorrowDate + s + ReturnDate + s +
                   LibraryCardNumber);
}
public void showAll () {
    String t = "\t";
    System.out.println(Isbn + t + CopyNumber + t + Title + t + Author + t +
                       Publisher + t + Year + t + Statistics + t + 
                       BorrowDate + t + ReturnDate + t + LibraryCardNumber);
}
}

そして最後に、mainメソッドを持つMainクラスがあります。

public class Main<aBookList> implements Comparable<aBookList> {
public static void main(String [] args) throws Exception {

    new Library().readFromFile("Books.txt");

    new Library().writeToFile("NewBooks.txt");
    new Library().writeToFile("ErrorLines.txt");

}

@Override
public int compareTo(aBookList o) {
    return 0;
}
}
4

1 に答える 1

0

宿題なので、コードは教えませんが、道順を教えます

1) ここにはたくさんの混乱があります。つまり、メイン クラスで比較を行う理由がわかりません。bookInfo で getAll メソッドを作成する代わりに (これは Java 命名規則に基づいて命名されます)、toString メソッドをオーバーライドするだけです。

2) なぜ文字列のリストがあるのですか? 行を読み、これを本に変換し、本が有効であればリストに追加し、そうでなければエラーを報告する

3) isISBN13Valid メソッドを book に移動します

4) ファイルに書き込み -> リストをループし、各要素をファイルに保存します bw.write(book.toString())

5)2番目のメソッドcreateErrorFileを作成し、エラーリストに追加する各エラーを作成します。そのメソッドを呼び出した後、各要素を特定のファイルに保存します。これは完全な解決策ではありません。発生するたびにファイルします。

6)メインメソッドでライブラリのインスタンスを1つ作成し、それをすべてのメソッドで呼び出し、プロジェクトで静的フィールドを使用しないようにします(必要な場合もありますが、必要ない場合は避けてください)

7) メソッドの import/export の名前 read from file read from file よりいい音だと思う

于 2012-11-01T14:19:18.160 に答える