2

私は長年Javaでコーディングしていませんが、最近、Javaベースのプログラムを動作させるように依頼されました。簡単に言うと、電話番号の代わりにユーザーIDをレポートに配置することを除いて、必要なすべてのことを実行しました。私たちはプログラムを所有する会社のパートナーであり、必要に応じて変更する許可を得ていることを指摘しておく必要があります。ただし、彼らのWebサイトはソースコードを提供していません。リクエストしましたが、3週間経っても運がありません。そのため、コードを逆コンパイルして、必要な変更を加える必要があります。私はなんとか変更を加え、3つを除くすべてのコンパイルエラーを削除しました。これらはすべて、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ループを含むコードのセクションです。メインの残りの部分を省略しました。必要に応じて、クラス全体(750行)またはメソッド(160行)を投稿できます。私が気付いたのは、str3が初期化されているのに、Forループ内では認識されないということです。ただし、元の初期化をそのままにして、Forループ内で再初期化を試みた場合。私のコンパイラは、変数がメソッド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);

    }
  }
 }
4

5 に答える 5

5

拡張forループを使用する場合は、forステートメント内で「ループ変数」を宣言する必要があります。

for (String s : list)

一方、この同様のコードはコンパイルされません。

String s;
for (s : list)

これは、言語仕様#14.14.2で要求されています。

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

Type(パラメーターの宣言に必要なことに注意してください)

于 2013-02-24T17:18:29.047 に答える
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);

    }
  }
 }
于 2013-02-24T17:14:39.077 に答える
1
for ( str3 : arrayOfString2 ) {
          fileNames.add(DEFAULT_BILLING_DIR + str3);

代わりにする必要があります

for (String str3 : arrayOfString2 ) {
          fileNames.add(DEFAULT_BILLING_DIR + str3);
于 2013-02-24T17:14:36.097 に答える
1

を削除してString str3変更しますfor

 for (String str3 : arrayOfString2 ) {
          fileNames.add(DEFAULT_BILLING_DIR + str3);
于 2013-02-24T17:15:32.083 に答える
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);

            }
       }
    }

詳細については、Forステートメントを確認してください

于 2013-02-24T17:18:37.977 に答える