2013-01-01 52 views
1

我有一个名为worker的类和一个名为Pass的类,它是worker的pass。 我试图构建主类,其中所有的进程都是从文本文件中读取的。我的代码充满了循环,希望能够工作,但即时通讯有问题。文本的第一行是纯文本,像Worker: 1 worker1,它只是意味着创建一个名为worker1的Worker对象并且其passid(他的pass的id)编号为1.这是可以做到的。但是在此之后,我只是在循环中创建了他的pass.Which是我的问题。 该文本文件的2n行给我的工人1的AccessLog给我一个进入和退出的日期。Java难以通过循环与类对象进行通信

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和出口是该日志的访问通类的方法,我也得到一个错误失踪符号worker1pass 。另外,workerpass声明中似乎存在一个问题,因为在netbeans中,worker1pass下面有一条灰线,将其作为未使用的对象进行调用。最后,我想补充一点,除了外部文本文件的解决方法代码外,代码可以100% 。 欢迎任何提示和建议。

编辑-------

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

下worker1Pass即时得到:变量worker1Pass不使用

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

这里即时得到找不到符号:worker1pass 是像通worker1pass声明不会像它应该那样声明新的传递,因此这些方法不会像他们应该那样添加进入和退出日志。

+0

也许是我,但我我很难理解你的问题是什么以及你想做什么。如果您很快就没有得到体面的解决方案,可以考虑1)使用段落来更清楚地写出问题,以区分主要观点并使用清晰易懂的句子。 2)显示您可能会看到的所有错误消息。 –

+0

你是否应该创建一个Worker或Pass对象的集合?如果是这样,这些藏品在哪里?另外,我已经删除了[tag:netbeans]标签,因为你的问题实际上与netbeans无关。 –

+0

另外考虑显示一些你的数据文件,以便我们可以更好地理解它的结构。 –

回答

2

你所得到的missing symbol错误,因为worker1Pass在第一if语句定义,只有在上下文是否是可见的。这就是为什么netbeans也在抱怨,因为第一个if中的worker1Pass在其他任何地方都不可见(也未被使用)。 至少,您应该在if之外声明worker1Pass,以便在第二个if声明中也可见。

像@HovercraftFullOfEels建议,如果你需要维护所有workerspass对象,你可以使用一个CollectionList,你的代码看起来是这样的:

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     
    } 
+0

嗯,我想所有的声明在文本扫描后的循环。不知道我是否应该自由地声明它没有文本告诉我。 – dmarkos

+0

但是,用于指出故障的是thanx。 – dmarkos

+0

@ user1839880查看我的更新回答。 – dan