我已经很多年没有用Java编写代码了,但是最近我被要求在工作中实现一个基于Java的程序。长话短说,它做了我们需要的一切,除了将用户ID而不是电话号码放在报告中。我应该指出,我们是拥有该程序的公司的合作伙伴,并且我有权根据需要进行更改。但是,他们的网站不提供源代码。我已提出要求,但3周后没有运气。因此,我必须反编译代码,并进行所需的更改。我设法进行了更改,并删除了除三个以外的所有编译错误。在三个不同的For循环上,它们都是相同的错误。当我尝试顶级编译时,我得到以下内容。

FraudDetectionTool.java:655: not a statement
        for ( str3 : arrayOfString2 ) {
              ^
FraudDetectionTool.java:655: ';' expected
        for ( str3 : arrayOfString2 ) {
                  ^
FraudDetectionTool.java:655: illegal start of expression
        for ( str3 : arrayOfString2 ) {
                   ^
FraudDetectionTool.java:655: ';' expected
        for ( str3 : arrayOfString2 ) {
                    ^
FraudDetectionTool.java:681: not a statement
      for (str3 : array3) {
           ^
FraudDetectionTool.java:681: ';' expected
      for (str3 : array3) {
               ^
FraudDetectionTool.java:681: illegal start of expression
      for (str3 : array3) {
                ^
FraudDetectionTool.java:681: ';' expected
      for (str3 : array3) {
                 ^
FraudDetectionTool.java:695: not a statement
      for (str3 : arrayOfString3) {
           ^
FraudDetectionTool.java:695: ';' expected
      for (str3 : arrayOfString3) {
               ^
FraudDetectionTool.java:695: illegal start of expression
      for (str3 : arrayOfString3) {
                ^
FraudDetectionTool.java:695: ';' expected
      for (str3 : arrayOfString3) {


这是包含第一个for循环的代码部分。我省略了Main的其余部分。如果需要,我可以发布整个课程(750行)或方法(160行)。我注意到的是str3已初始化,但是在For循环中却无法识别。但是,如果我将原始初始化保留在原处,并尝试在For循环中重新初始化。我的编译器警告我,该变量已在Method Main中使用。

public static void main(String[] paramArrayOfString)
{
 initializeProperties();
 init();

 GenericInputChannel.initialize(true);

 for (String str1 : paramArrayOfString) {
  fileNames.add(str1);
 }

 try
 {
   String[] mail = EMAIL_ADDRS.split(",");
   for (String str2 : mail) {
     str2 = str2.replaceAll(" *", "");
     emailAddresses.add(str2);
     if (str2.length() > 0) {
      if (DEBUG) {
            System.out.println("Adding email " + str2);
      }
      sendEmail = true;
    }
  }
 }
 catch (Exception localException1) {
   System.out.println("Error parsing email addrs " + EMAIL_ADDRS);
   emailAddresses.clear();
 }

 if (TEST_MODE) {
  System.out.println("Sending Test email");
  sendEmail(true);
  System.exit(0);
 }

 String[] arrayOfString2 = new String[1];
 String str3;

 if (fileNames.size() == 0)
 {
 File localfiler = new File(DEFAULT_BILLING_DIR);
  if (((File)localfiler).exists()) {
    arrayOfString2 = ((File)localfiler).list();
    for ( str3 : arrayOfString2 ) {
          fileNames.add(DEFAULT_BILLING_DIR + str3);

    }
  }
 }

最佳答案

使用增强的for循环时,必须在for语句中声明“循环变量”:

for (String s : list)


另一方面,此类似代码将无法编译:

String s;
for (s : list)


这是language specification # 14.14.2所必需的:

EnhancedForStatement:
    for ( FormalParameter : Expression ) Statement
FormalParameter:
    VariableModifiersopt Type VariableDeclaratorId


(请注意,参数声明中必须为Type

关于java - 对于循环-无法识别变量; “不是声明”错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15054206/

10-12 00:32
查看更多