1

为什么我无法在 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);

错误消失。这是什么原因?

4

2 回答 2

7

Java 的通用语法for loop如下:

for ( {initialization}; {exit condition}; {incrementor} ) code_block;

这意味着您不能只在初始化块中写下变量名。如果你想使用一个已经定义的变量,你只需让它为 emtpy。

这应该适合你:

for (; userInt < ender; userInt++) {
        System.out.println(userInt);
}
于 2013-08-14T17:34:24.033 回答
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列表中的任何元素,这会导致编译错误。

于 2013-08-14T17:38:25.080 回答