Java For循环-未识别变量&引用;不是一份声明”;错误
我已经很多年没有用Java编写代码了,但最近我被要求在工作中实现一个基于Java的程序。长话短说,它做了我们需要的一切,只是把用户ID放在报告中,而不是电话号码。我应该指出的是,我们是该项目负责人公司的合作伙伴,我得到他们的许可,可以根据需要进行更改。但是,他们的网站没有提供源代码。我已经要求过了,但三周后就没什么运气了。因此,我必须反编译代码,并进行必要的更改。我已成功地进行了更改,并删除了除三个编译错误以外的所有编译错误。它们在三个不同的For循环上都是相同的错误。当我尝试top编译时,我得到以下结果Java For循环-未识别变量&引用;不是一份声明”;错误,java,loops,for-loop,Java,Loops,For Loop,我已经很多年没有用Java编写代码了,但最近我被要求在工作中实现一个基于Java的程序。长话短说,它做了我们需要的一切,只是把用户ID放在报告中,而不是电话号码。我应该指出的是,我们是该项目负责人公司的合作伙伴,我得到他们的许可,可以根据需要进行更改。但是,他们的网站没有提供源代码。我已经要求过了,但三周后就没什么运气了。因此,我必须反编译代码,并进行必要的更改。我已成功地进行了更改,并删除了除三个编译错误以外的所有编译错误。它们在三个不同的For循环上都是相同的错误。当我尝试top编译时,我得
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);
}
}
}
一定是
for (String str3 : arrayOfString2 ) {
fileNames.add(DEFAULT_BILLING_DIR + str3);
改变
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);
}
}
}
到
删除
字符串str3
并修改的:
for (String str3 : arrayOfString2 ) {
fileNames.add(DEFAULT_BILLING_DIR + str3);
使用增强的for循环时,必须在for语句中声明“loop variable”:
for (String s : list)
另一方面,类似的代码不会编译:
String s;
for (s : list)
这是以下要求:
增强声明:
for(FormalParameter:Expression)语句
形式参数:
VariableModifiersopt类型VariableDeclaratorId
(请注意,类型
在参数声明中是必需的)您的问题是在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(str3:arrayOfString2)’哪个java版本?Foreach需要java 5+…字符串不可变与此无关。增强的for
循环只需要在for
语句本身中声明循环变量的类型。看,例如,哦,是的。。。对不起mistace@AlekseiBulgak,我尝试了,但是在同一个方法中还有另外两个for循环也使用str3,并且在这些循环中留下了相同的问题。显然,我不想在每个循环中重新初始化str3。我不认为在不更改循环的情况下可以这样做。如果您想使用foreach语句,您需要重新初始化str3I,并将For循环重建为非增强型,然后它就可以工作了。现在我只有两个错误。
String s;
for (s : list)
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);
}
}
}