我多年没有使用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);
}
}
}
答案 0 :(得分:5)
使用增强型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
)
答案 1 :(得分: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 :(得分:1)
for ( str3 : arrayOfString2 ) {
fileNames.add(DEFAULT_BILLING_DIR + str3);
必须是
for (String str3 : arrayOfString2 ) {
fileNames.add(DEFAULT_BILLING_DIR + str3);
答案 3 :(得分:1)
删除String str3
并修改for
:
for (String str3 : arrayOfString2 ) {
fileNames.add(DEFAULT_BILLING_DIR + str3);
答案 4 :(得分: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