1

我有一个名为工人的班级和一个名为 Pass 的班级,这是工人的通行证。我正在尝试构建从文本文件中读取所有进程的主类。我的代码充满了循环,希望能正常工作,但我遇到了问题。文本的第一行是纯文本,例如 Worker: 1 worker1 ,这只是意味着创建一个名为 worker1 的 Worker 对象,passid(他的通行证的 id)编号为 1。这是可行的。但是在此之后我只是将他的通行证的创建放入循环中。这是我的问题。文本文件的第 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 的错误。workerpass 声明中似乎也存在问题,因为在 netbeans 中,worker1pass 下方有一条灰线,将其称为未使用object.Lastly 我想补充一点,除了外部文本文件的解决方法代码之外,代码 100% 有效。欢迎任何提示和建议。

编辑 - - - -

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

在worker1Pass下我得到:变量worker1Pass未使用

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

这里我找不到符号:worker1pass 就像 pass worker1pass 声明没有像它应该做的那样声明一个新的 pass,因此这些方法不会像应该做的那样将入口和出口添加到日志中。

4

1 回答 1

2

您收到missing symbol错误是因为worker1Pass在第一if条语句中定义并且仅在 if 上下文中可见。这就是 netbeans 也抱怨的原因,因为第worker1Pass一个if在其他任何地方都不可见(也不使用)。你应该worker1Pass在你的外部声明if,至少,在第二个if语句中也是可见的。

就像@HovercraftFullOfEels 建议的那样,如果您需要维护可以使用CollectionListworkers的所有对象,您的代码将类似于: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 回答