Java—为什么我不能在for循环之外初始化变量的起始值?
有什么原因不能在for循环外初始化变量的起始值吗?当我这样做时:Java—为什么我不能在for循环之外初始化变量的起始值?,java,for-loop,Java,For Loop,有什么原因不能在for循环外初始化变量的起始值吗?当我这样做时: public static void main(String[] args) { int userInt = 1; int ender = 10; for (userInt; userInt < ender; userInt++) { System.out.println(userInt); 我收到一个语法错误,指出需要为userInt分配一个值,即使我已经为它分配了一个
public static void main(String[] args) {
int userInt = 1;
int ender = 10;
for (userInt; userInt < ender; userInt++) {
System.out.println(userInt);
我收到一个语法错误,指出需要为userInt分配一个值,即使我已经为它分配了一个值1。当我这样做时:
public static void main(String[] args) {
int userInt;
int ender = 10;
for (userInt = 1; userInt < ender; userInt++) {
System.out.println(userInt);
错误消失了。原因是什么?Java for循环的通用语法如下:
for ( {initialization}; {exit condition}; {incrementor} ) code_block;
这意味着您不能只在块中写下变量名。如果要使用已定义的变量,只需让它emtpy即可
这应该适合您:
for (; userInt < ender; userInt++) {
System.out.println(userInt);
}
Java for循环的通用语法如下所示:
for ( {initialization}; {exit condition}; {incrementor} ) code_block;
这意味着您不能只在块中写下变量名。如果要使用已定义的变量,只需让它emtpy即可
这应该适合您:
for (; userInt < ender; userInt++) {
System.out.println(userInt);
}
问题是for语句需要一个表达式
根据报告:
然后:
BasicForStatement:
for ( ForInitopt ; Expressionopt ; ForUpdateopt ) Statement
ForStatementNoShortIf:
for ( ForInitopt ; Expressionopt ; ForUpdateopt ) StatementNoShortIf
ForInit:
StatementExpressionList
LocalVariableDeclaration
ForUpdate:
StatementExpressionList
StatementExpressionList:
StatementExpression
StatementExpressionList , StatementExpression
正如您看到的basic for语句一样,第一个元素是可选的初始化,即语句或局部变量声明
该声明是以下声明之一:
StatementExpression:
Assignment
PreIncrementExpression
PreDecrementExpression
PostIncrementExpression
PostDecrementExpression
MethodInvocation
ClassInstanceCreationExpression
在您的示例中,userInt=1是一个赋值,而只是userInt与StatementExpression列表中的任何元素都不匹配,这会导致编译错误。问题在于for语句需要一个表达式
根据报告:
然后:
BasicForStatement:
for ( ForInitopt ; Expressionopt ; ForUpdateopt ) Statement
ForStatementNoShortIf:
for ( ForInitopt ; Expressionopt ; ForUpdateopt ) StatementNoShortIf
ForInit:
StatementExpressionList
LocalVariableDeclaration
ForUpdate:
StatementExpressionList
StatementExpressionList:
StatementExpression
StatementExpressionList , StatementExpression
正如您看到的basic for语句一样,第一个元素是可选的初始化,即语句或局部变量声明
该声明是以下声明之一:
StatementExpression:
Assignment
PreIncrementExpression
PreDecrementExpression
PostIncrementExpression
PostDecrementExpression
MethodInvocation
ClassInstanceCreationExpression
在您的示例中,userInt=1是一个赋值,而只是userInt与StatementExpression列表中的任何元素都不匹配,这会导致编译错误。@TomFang:要回答您最初尝试失败的原因:这是因为userInt;不是有效语句,这是您在原始for循环中尝试计算的内容。任何内容都可以进入初始化块,不必初始化任何内容。正如@JasonC所说,只需要是一个有效的声明。这就是我的批评+1@TomFang:回答最初尝试失败的原因:这是因为userInt;不是有效语句,这是您在原始for循环中尝试计算的内容。任何内容都可以进入初始化块,不必初始化任何内容。正如@JasonC所说,只需要是一个有效的声明。这就是我的批评+1+1回答得很好。澄清一下,因为它没有显示挑刺:它也不匹配EnhancedForStatement或LocalVariableDeclaration。+1很好的答案。澄清一下,因为它没有显示:它也不匹配EnhancedForStatement或LocalVariableDeclaration。