我有没有理由不能在for循环之外初始化变量的起始值?当我这样做时:
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);
错误消失了。这是什么原因?
答案 0 :(得分:7)
Java for loop
的通用语法如下:
for ( {initialization}; {exit condition}; {incrementor} ) code_block;
这意味着你不能只在inizalization块中写下变量名。如果你想使用一个已定义的变量,你只需要它就可以了。
这应该适合你:
for (; userInt < ender; userInt++) {
System.out.println(userInt);
}
答案 1 :(得分:3)
问题是for
语句需要表达式。
ForStatement:
BasicForStatement
EnhancedForStatement
然后:
BasicForStatement:
for ( ForInitopt ; Expressionopt ; ForUpdateopt ) Statement
ForStatementNoShortIf:
for ( ForInitopt ; Expressionopt ; ForUpdateopt ) StatementNoShortIf
ForInit:
StatementExpressionList
LocalVariableDeclaration
ForUpdate:
StatementExpressionList
StatementExpressionList:
StatementExpression
StatementExpressionList , StatementExpression
当你看到基本的for语句时,第一个元素是可选的初始化,它是语句或局部变量声明。
声明是以下之一:
StatementExpression:
Assignment
PreIncrementExpression
PreDecrementExpression
PostIncrementExpression
PostDecrementExpression
MethodInvocation
ClassInstanceCreationExpression
在您的示例中,userInt = 1
是Assignment
,而userInt
只与StatementExpression
列表中的任何元素都不匹配,这会导致编译错误。