2014-02-08 53 views
0

我真的不明白为什么这不会工作...初始化一个for循环有2个变量

for (int i = 1, int k = 2; i<=4000000; i++) { 

    } 

虽然这...

for (int i = 1; i<=4000000; i++) { 

    } 

我需要初始化两个变量,但当我尝试第一个代码时,它不会编译,代码看起来是正确的?

+0

基本上我是使用声明每个变量作为int单独不会complile ... –

回答

3

如果要初始化多个变量,那么就需要是同一类型的,你必须只使用一个声明,所以它看起来像这样:

for (int i = 1, k = 2; i<=4000000; i++) { 

} 

我写了一些关于for的语法回应Types permitted in for loop variable declarations?回答这不是一个完全相同的问题,但我认为答案在这里也很有意义。

通常,您可以查看the for statement的Java语言规范。您可以在for循环中声明和初始化任何类型的变量,并且甚至可以声明多个变量,只要它们都是相同的类型即可。在语法的相关产品有:

BasicForStatement: 
    for (ForInitopt ; Expressionopt ; ForUpdateopt) Statement 

ForInit: 
    StatementExpressionList 
    LocalVariableDeclaration 

LocalVariableDeclaration: 
    VariableModifiersopt Type VariableDeclarators 

VariableDeclarators: 
    VariableDeclarator 
    VariableDeclarators , VariableDeclarator 

这意味着你可以做任何以下,例如,

for (; … ; …)       // no variable declaration at all 
for (int i; … ; …)     // variable declaration with no initial value 
for (int i=0; … ; …)     // variable declaration with initial value 
for (int i=0, j=1; … ; …)    // multiple variables 
for (final Iterator<T> it = …; … ; …) // final variable 

第四种情况是,你此刻关心的一个。

顺便说一句,在ForInit也可以是StatementExpressionList,这意味着,而不是声明和初始化变量,你也可以只是执行一些语句。例如,你可以这样做(但这不是一个特别有用例如):

for (System.out.println("beginning loop" ; … ; …) 
+0

使用int只有一次...谢谢,现在的作品:) –

0
for (int i = 1, k = 2; i<=4000000; i++) { 
1

更改为for (int i = 1, k = 2; i<=4000000; i++) {

Doc

for语句的一般形式可表示如下:

for (initialization; termination; increment) { 
    statement(s) 
} 
  • 初始化表达式初始化循环;它在循环开始时执行 一次。
  • 终止表达式计算结果为false时,循环 终止。
  • 增量表达式在通过 循环的每次迭代之后被调用;这个表达式递增或递减一个值是完全可以接受的。

可以初始化为连续int i=1,k=2;

-1

2个初始化应该是分号分隔状

int a; int b; 

在你已经把他们分开上述情况下使用逗号,所以它给人一种编译错误。
此致敬礼。

+0

不。您的答案是不正确的初始化'if '块 - 看其他答案。有人将您的答案标记为“不是答案”或“非常低质量”,并且[我正在审核队列中检查该标志](https://stackoverflow.com/review/low-quality-posts/18647242 )。你试图回答这个问题,所以尽管我认为你的回答是错误的,但我不会推荐它作为评论者的角色被删除,因为downvote在这里是正确的行为。 –

+0

这不提供问题的答案。一旦你有足够的[声誉](https://stackoverflow.com/help/whats-reputation),你将可以[对任何帖子发表评论](https://stackoverflow.com/help/privileges/comment);相反,[提供不需要提问者澄清的答案](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an- I-DO-代替)。 - [来自评论](/ review/low-quality-posts/18647242) – zx485