重复的局部变量(For Loops)

时间:2014-06-16 08:28:55

标签: java variables duplicates local

我试图解决一项任务(我对Java仍然很陌生)并且已经梳理了很多资源来解决这个冲突,但仍然无法解决这个问题。(注意:金枪鱼是我的扫描仪变量)

    int counted, sum, counted1;


    System.out.print("Enter your number to be calculated: ");
    counted = tuna.nextInt();
    counted1 =tuna.nextInt();


    for(int counted=0;counted<=counted1;counted++){
        System.out.println("The sum is: "+ counted);
    }
}

}

结果是: 线程&#34; main&#34;中的例外情况java.lang.Error:未解决的编译问题:     计算重复的局部变量

我应该解决的问题是:

编写程序以读取数字,并将从1到该数字的所有数字相加。例如,如果 6中的用户键,则输出为21(1 + 2 + 3 + 4 + 5 + 6)。

补充:我读了一个相似的问题(),但我之前没有通过宣布这个问题来解决这个问题。

6 个答案:

答案 0 :(得分:5)

在Java中(与C ++相反),如果它们在相同的范围内,则局部变量不能具有与之前声明的变量相同的名称。

{  //external variable
    int x;
    { //internal variable
        int x;
        //do something
    }
}

您将无法编译此代码。

在你的例子中,你应该做到这样:

int counted, sum;


System.out.print("Enter your number to be calculated: ");
counted = tuna.nextInt();


for(int counter=0;counter<=counted;counter++){
    sum=sum+counter;
}
System.out.println("The sum is: "+ sum);
}          

结果将在变量sum中,它只会在控制台上显示一次。

答案 1 :(得分:5)

您在同一范围内声明了两个具有相同名称的变量:counted在循环外和循环内声明。顺便说一句,根据您的规范:

编写程序以读取数字,并将从1到该数字的所有数字相加。例如,如果用户键在6中,则输出为21(1 + 2 + 3 + 4 + 5 + 6)

您不需要第一个counted var,因为它是一个常量(常量1)。因此,您可以通过这种方式将1声明为常数:

final int STARTING_NUMBER = 1

然后在循环中使用此常量:

int counted, sum;
counted = tuna.nextInt();    

for(int index=STARTING_NUMBER;index<=counted;index++){
    sum=sum+index;
}
System.out.println("The sum is: "+ sum);

编辑:您可以在任何地方声明变量。重要的是你在同一范围内声明它们一次。你可以这样做:

int counted, sum, index;
counted = tuna.nextInt();    

for(index=STARTING_NUMBER;index<=counted;index++){
    sum=sum+index;
}
System.out.println("The sum is: "+ sum);

在循环外声明index。结果不会改变。但是,声明for loop用作索引的变量(您可以调用此变量indexcounteri或{{1}这是一个常见的实践。为了更好的可读性,在for循环本身内部(在其防护中,更准确)。

答案 2 :(得分:3)

for(int counted=0;counted<=counted1;counted++){
    System.out.println("The sum is: "+ counted);
}

在这里,您重新声明一个与已存在的名称完全相同的int。 使用类似的东西:

for(int counted1=0;counted1<=counted1;counted1++){
    System.out.println("The sum is: "+ counted1);
}

for(counted=0;counted<=counted1;counted++){
    System.out.println("The sum is: "+ counted);
}

如果你想使用先前声明的变量

答案 3 :(得分:3)

问题是你已经两次声明了int“count”。一旦位于代码的顶部,一旦进入for循环。从for循环中删除int声明应修复此问题,例如:

for(counted=0;counted<=counted1;counted++)

答案 4 :(得分:2)

实际上你在循环之外声明了变量counted并且作为循环计数器,所以这两个名称相同的变量位于同一个块中({}之间的代码的一部分。

你应该避免在循环外声明这个变量(如果你只需要它作为循环计数器)或者在循环外声明它,然后在循环中使用它如下:

for(;counted<=counted1;counted++)

答案 5 :(得分:2)

在Java中,必须遵守局部变量的范围。要解决此问题,请重命名for语句中的“计数”。

关于问题:请查看http://en.wikipedia.org/wiki/Carl_Friedrich_Gauss#Anecdotes