1

私にはworkerという名前のクラスと、workerのパスであるPassという名前のクラスがあります。すべてのプロセスがテキストファイルから読み取られるメインクラスを構築しようとしています。私のコードはループでいっぱいで、うまくいけばうまくいきますが、問題があります。テキストの最初の行は、Worker:1のようなプレーンテキストです。 worker1は、worker1という名前でpassid(パスのID)番号1を使用してWorkerオブジェクトを作成することを意味します。これは実行可能です。しかし、この後、パスの作成をループに入れるだけです。これが私の問題です。テキストファイルの2n行は、worker1のAccessLogを提供し、開始日と終了日を提供します。

    public static void main(String[ ] args) throws IOException {

  String file_name = "data.txt";

  try {
      FileRead file = new FileRead( file_name );
      String[ ] aryLines = file.Openfile();

      int i;
      for ( i=0; i < aryLines.length; i++ ) {
             String phrase = aryLines[i];
             String div = "[ ]+";
             String[] tokens = phrase.split(div);

             if (tokens[0].equals("Officer:")){

               if (tokens[1].equals("1")){

               Officer worker1 = new Worker("1","worker1",1);
               Pass worker1Pass = worker1.getPass();
               }


             //etc. for other workers                   
             }

アクセスログのコードが来て、エラーを説明します

    else{
                 if (tokens[0].equals("AccessLog:")){

                  if (tokens[1].equals("1")){
                  String s1 = tokens[2] + tokens[3] ;
                  String s2 = tokens[4] + tokens[5] ;

                  try{
                      Date entry = new SimpleDateFormat("dd/MM/yyHH:mm:ss").parse(s1);

                      Date exit = new SimpleDateFormat("dd/MM/yyHH:mm:ss").parse(s2);
                      worker1Pass.workerEntry(entry);
                      worker1Pass.workerExit(exit);


                  }
                    catch (ParseException a) {
                       System.out.println( a.getMessage() );
                    }  
               }

workerentryとexitは、アクセスをログに記録するpassクラスのメソッドであり、シンボルworker1passが見つからないためにエラーが発生します。また、netbeansではworker1passの下に未使用と呼ばれる灰色の線があるため、workerpass宣言に問題があるようです。最後に、外部テキストファイルの回避策コードを除いて、コードが100%機能することを追加したいと思います。ヒントや提案は大歓迎です。

編集 - - - -

    Worker worker1 = new Worker("1","worker1",1);
               Pass worker1Pass = worker1.getPass();

下のworker1Passimget:変数worker1Passは使用されません

                          worker1Pass.workerEntry(entry);
                  worker1Pass.workerExit(exit);

ここで、im getはシンボルを見つけることができません:worker1passパスworker1pass宣言は、必要に応じて新しいパスを宣言しないため、メソッドは、必要に応じてエントリと終了をログに追加しません。

4

1 に答える 1

2

は最初のステートメントで定義されており、if コンテキストでのみ表示されるため、missing symbolエラーが発生しています。これが、最初のが他のどこにも表示されない (そして使用されない)ため、netbeans も不平を言っている理由です。少なくとも、2 番目のステートメントでも表示されるように、の外で宣言する必要があります。worker1Passifworker1Passifworker1Passifif

@HovercraftFullOfEels が提案したように、 CollectionまたはListを使用できるすべてのオブジェクトworkersとオブジェクトを維持する必要がある場合、コードは次のようになります。pass

List<Officer> workers = new ArrayList<Officer>();
List<Pass> passes = new ArrayList<Pass>();
for ( i=0; i < aryLines.length; i++ ) { 
  String phrase = aryLines[i];
  String div = "[ ]+";
  String[] tokens = phrase.split(div);
  Officer worker = null; // and from this point on use this variable to represent a worker
  Pass workerPass = null; // used to represent a pass
  if (tokens[0].equals("Officer:")){
     if (tokens[1].equals("1")){
        worker = new Worker("1","worker1",1);
        workerPass = worker1.getPass();
        workers.add(worker); // add the worker in the workers list
        passes.add(workerPass); // add the pass in the passes list

     } 
     //etc. for other workers                   
  }
于 2013-01-01T16:01:57.333 に答える