0

プログラムのこの部分で複数のエラーが発生しています。基本的に行うことは、整理されていないファイル PersonnelInfo.txt から入力を読み取り、それを EmployeeInfo クラスの配列に並べ替えることです (問題がそのクラスにあるとは思わないため投稿されていません。参考までに載せます)。

情報 (名前、ID 番号、会社での役職など) を並べ替えた後、プログラムはこれを別のファイル ORGANIZEDPersonnelInfo.txt に書き込みます。このファイルは次のように並べ替えられます。

名前:ここに従業員名

ID: ここに従業員 ID

私が得ている1つのエラーは「静的FileWriter writeOut ...」行にあり、「未処理の例外タイプIOExceptionです。スローIOExceptionをメインメソッド宣言に入れましたが、何もしませんでした。

次に、「public String toString()」メソッドで複数のエラーが発生しています。無効にしようとすると、戻り値の型が Object.toString() と互換性がないと言われます。それを文字列として保持し、null を返すと、try/catch を使用する必要がありますが、主なエラーはまだ存在します。

助けてください!これはかなりイライラします...

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

public class HR {

static EmployeeInfo[] employee = new EmployeeInfo[4];
static FileWriter writeOut = new FileWriter("/Users/zach/Documents/workspace/Dec. 10, 2012/src/ORAGNIZEDPersonnelInfo.txt");
static BufferedWriter out = new BufferedWriter(writeOut);


public static void main(String[] args) throws IOException {
    File PersonnelInfo = new File("/Users/zach/Documents/workspace/Dec. 10, 2012/src/PersonnelInfo.txt");
    Scanner inputFile = new Scanner(PersonnelInfo);

    int numOfEmployees = Integer.parseInt(inputFile.nextLine());
    System.out.println("Number of employees: " + numOfEmployees);



    for (int i = 0; i < 4; i++) {
        String name = inputFile.nextLine();
        String ID = inputFile.nextLine();
        String title= inputFile.nextLine();
        String startDate = inputFile.nextLine();
        employee[i] = new EmployeeInfo(name, ID, title, startDate);
    }

    listEmployeeInfo();
    employee.toString();

}


public String toString() {
    for (EmployeeInfo i: employee) {
        out.write("Name: " + i.getName());
        out.write("ID: " + i.getID());
        out.write("Title: " + i.getTitle());
        out.write("Start Date: " + i.getStartDate());
    }
    return null;
}
4

5 に答える 5

0

toString()を修正

public String toString() {
    StringBuffer buf = new StringBuffer();
    for (EmployeeInfo i: employee) {
        buf.append("Name: ").append(i.getName());
        buf.append("ID: ").append(i.getID());
        // ....
    }
    return buf.toString();
}

メインでコンテンツを印刷します:

HR hr = new HR();
out.write(hr.toString());

しかし、私は独自の書き込みメソッド「writeEmployees(out)」を使用して書き込みます ポスターJB Nizetのソリューションを参照してください

于 2012-11-30T21:31:24.697 に答える
0

オーバーライドする場合toString()(toSTring() は Object のメソッドであり、すべてのクラスと同様に Object を拡張するクラスでそれを再定義しているため)、オーバーライドされたメソッドの契約を尊重する必要があります。オブジェクトの文字列表現を返すことです (そして、フィールドをバッファリングされたライターに書き込みません。このメソッドに別の名前を付けます。

out.write()さらに、チェック済み例外 IOException をスローするメソッド ( ) を呼び出しています。したがって、この例外の処理方法を知っていてキャッチする必要があるか、処理方法がわからず、メソッドが例外をスローすることを宣言する必要があります。

public void writeToOut() throws IOException {
    for (EmployeeInfo i: employee) {
        out.write("Name: " + i.getName());
        out.write("ID: " + i.getID());
        out.write("Title: " + i.getTitle());
        out.write("Start Date: " + i.getStartDate());
    }
}

プログラムに他のコンパイル エラーがあります。それぞれに、エラー メッセージ、ファイル名、および行番号が付いています。メッセージを理解し、エラーを修正してください。例外に関する Java チュートリアルを読んで、それらの処理方法を理解してください。

このチュートリアルを読んでも問題を解決できない場合は、別の質問をして、コンパイラから得た正確なエラー メッセージを貼り付けてください。

于 2012-11-30T21:31:56.967 に答える
0

2 つの理由から、Writer の静的宣言をメイン内に移動することをお勧めします (1 つは静的属性である必要がないことと、そこで IOException が処理されていることです)。から文字列を取得しtoString、ライターを使用して文字列をファイルに書き込みます。

  public class HR {

    static EmployeeInfo[] employee = new EmployeeInfo[4];


    public static void main(String[] args) throws IOException {
         FileWriter writeOut = 
                    new FileWriter("/Users/zach/Documents/workspace/"+
                                   "Dec. 10, 2012/src/ORAGNIZEDPersonnelInfo.txt");
         BufferedWriter out = new BufferedWriter(writeOut);

         File PersonnelInfo = new File("/Users/zach/Documents/workspace/"+
                                       "Dec. 10, 2012/src/PersonnelInfo.txt");
         Scanner inputFile = new Scanner(PersonnelInfo);

         ....
         //write employee string in the file
         out.write(getEmployeeString());
         out.close();
    }

    public String getEmployeeString() {
     StringBuilder stringBuilder = new StringBuilder();
     for (EmployeeInfo i: employee) {
          stringBuilder.append("Name: " + i.getName());
          stringBuilder.append("ID: " + i.getID());
          stringBuilder.append("Title: " + i.getTitle());
          stringBuilder.append("Start Date: " + i.getStartDate());
     }
     return stringBuilder.toString();
   }       
 }

それらを静的変数として作成する必要がある場合は、以下のように例外処理を使用して静的ブロックで初期化を行います。

     static FileWriter writeOut;
     static BufferedWriter out;

     static {
        try{
           writeOut = 
                    new FileWriter("/Users/zach/Documents/workspace/"+
                                   "Dec. 10, 2012/src/ORAGNIZEDPersonnelInfo.txt");
              out = new BufferedWriter(writeOut);
         }catch(IOException ioex){
               ioex.printStackTrace();
         }
     } 
于 2012-11-30T21:32:42.313 に答える
0

を実行static void mainしているときは、クラスのインスタンスではHRなく、その静的メソッドにいます。したがって、作成したtoString()メソッドを使用する場合は、次のようにする必要がありますnew HR().toString()

HRすべてのフィールドから static キーワードを削除し、オブジェクトのインスタンスを作成してから、そのオブジェクトのコンストラクターでファイルを開く方がよいでしょう。

public HR() {
  try {
    this.writeOut = new FileWriter("/Users/zach/Documents/workspace/Dec. 10, 2012/src/ORAGNIZEDPersonnelInfo.txt");
  } catch (IOException e) {
     // handle it, etc.
  }
}

public void processFile() {
  // Do the stuff
}

public static void main(String[] args) {
  HR myHR = new HR().processFile();
  // etc.
}

これにより、 toString() メソッドを使用して、思い通りに例外を処理できるようになります。

于 2012-11-30T21:33:21.443 に答える
0

他の人は toString() のアドレスを持っているので、FileWriter を試してみます...

writeOut静的スコープではなくメソッドに入力するので、例外をキャッチして、別のファイル名などを試すこともできます。

FileWriter openOutputfile(String name)
{
    boolean done = false;
    FileWriter result = null
    try {
        result = new FileWriter(...);
        done = true;
    }
    catch(IOException ex) {
        // print the stack trace
        // prompt for another filename
        // name = read line
    }
    return result;
}
于 2012-11-30T21:33:40.450 に答える