我有一个名为worker的类和一个名为Pass的类,它是worker的传递。 我试图构建一个主类,其中所有进程都从一个文本文件中读取。我的代码充满了循环,希望可以工作,但我有一个问题。文本的第一行是纯文本,像工人:1 worker1,它只是意味着创建一个名为worker1的Worker对象,并使用passid(他的传递的id)编号为1.这是可行的。但是在此之后我只是在循环中创建了他的pass.Which是我的问题。 文本文件的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下面有一个灰线表示它作为一个未使用的对象。最后我想补充一点,除了外部文本文件的变通代码,代码100%工作。
欢迎任何提示和建议。
EDIT -------
Worker worker1 = new Worker("1","worker1",1);
Pass worker1Pass = worker1.getPass();
在worker1Pass im getting:变量worker1Pass未使用
worker1Pass.workerEntry(entry);
worker1Pass.workerExit(exit);
这里我找不到符号:worker1pass 就像传递worker1pass声明没有声明它应该做的新传递一样,因此方法不会像它们应该那样添加条目和退出日志。
答案 0 :(得分:2)
您收到missing symbol
错误,因为worker1Pass
在第一个if
语句中定义,并且仅在if上下文中可见。这就是netbeans抱怨的原因,因为第一个worker1Pass
中的if
在其他任何地方都不可见(并且未被使用)。
您至少应在worker1Pass
之外声明if
,以便在第二个if
声明中显示。
与@HovercraftFullOfEels建议一样,如果您需要维护所有workers
和pass
个对象,可以使用Collection或List,那么您的代码会看起来像什么像:
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
}