2013-02-24 79 views
2

我很多年沒有用Java編碼,但最近我被要求在工作中實現一個基於java的程序。長話短說,它做了我們需要的一切,除了將用戶ID放在報告中而不是電話號碼中。我應該指出,我們是擁有該計劃的公司的合作伙伴,並且我有權根據需要進行更改。但是,他們的網站不提供源代碼。我已經要求了,但3周後沒有運氣。所以,我必須對代碼進行反編譯,並進行必要的更改。我設法進行了更改,並刪除了除三個之外的所有編譯錯誤。它們在三種不同的For Loops上都是相同的錯誤。當我嘗試頂層編譯時,我得到以下內容。For Loop - 變量未被識別; 「沒有聲明」錯誤

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); 

    } 
    } 
} 
+0

上線你所得到的錯誤?它從問題中不清楚。 – kaysush 2013-02-24 17:11:38

+0

對不起,'for(str3:arrayOfString2)' – user2104894 2013-02-24 17:28:17

+0

哪個java版本? Foreach需要java 5+ .. – atamanroman 2013-02-24 21:32:42

回答

5

當使用增強的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在參數的報關所需)

+0

我把For Loops重建爲非增強的,它可以工作。現在我只有兩個錯誤。 – user2104894 2013-02-24 19:28:20

1
for (str3 : arrayOfString2) { 
      fileNames.add(DEFAULT_BILLING_DIR + str3); 

必須改爲

for (String str3 : arrayOfString2) { 
      fileNames.add(DEFAULT_BILLING_DIR + str3); 
3

變化

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); 

    } 
    } 
} 

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

    } 
    } 
} 
+2

字符串是不可變的,與此無關。增強的for循環只需要在'for'語句本身中聲明循環變量的類型。例如,請參閱[這個問題](http:// stackoverflow。com/questions/8204341 /爲什麼做一個局部變量增強的for循環必須是本地的) – 2013-02-24 17:18:57

+0

哦是的...對不起,因爲mistace – 2013-02-24 17:20:54

+0

@AlekseiBulgak,我試圖,但是在同一個方法中還有另外兩個for循環也使用str3,並且在這些循環中留下了相同的問題。很明顯,我不想在每個循環中重新初始化str3。 – user2104894 2013-02-24 17:30:27

1

刪除您String str3和修改for

for (String str3 : arrayOfString2) { 
      fileNames.add(DEFAULT_BILLING_DIR + str3); 
1

你的問題是,當你在arrayOfString2循環的STR3,怎麼一回事,因爲你必須聲明循環內的STR3變量。

像這樣修復你的代碼應該可以解決你的問題。

String[] arrayOfString2 = new String[1]; 

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

      } 
     } 
    } 

欲瞭解更多詳細信息,請The For Statement