我需要创建81个不同的JLabels
。简而言之,有没有办法在循环中创建具有单独名称等的81个变量?例如:
for(int i = 0; i <= 80; i++) {
JLabel i = new JLabel();
this.add(i);
}
这将返回错误:
sudokuSolver.java:26: error: variable i is already defined in constructor solveS
udoku()
JLabel i = new JLabel();
^
1 error
我在StackOverflow上查看了类似的问题,例如使用ArrayList
,但是,我找不到适合我的合适方法。
答案 0 :(得分:3)
只需将您的JLabel
重命名为其他内容,因为它与您的循环变量具有相同的名称。
答案 1 :(得分:2)
在编程中,学习如何理解编译器错误消息非常重要。
在这种情况下,它说:
variable i is already defined
......它甚至指向错误的位置。
您正在声明类型为i
的变量JLabel
。但是已经存在类型为i
的变量 - 您在for
语句中声明的int。
为您的JLabel变量指定一个不同的名称(jLabel
,小写j
是个好名字),错误就消失了。
答案 2 :(得分:2)
标识符不能与关键字(§3.9),布尔文字(§3.10.3)或空文字(§3.10.7)具有相同的拼写(Unicode字符序列),否则会发生编译时错误
来自JLS 6.3. Scope of a Declaration
此程序导致编译时错误,因为x的初始化在x声明作为局部变量的范围内,并且局部变量x尚未具有值且无法使用。
来自JLS 6.4 Shadowing and Obscuring
由于标识符声明为方法,构造函数或初始化程序块的局部变量,因此不能出现在同名参数或局部变量的范围内,因此以下程序会发生编译时错误:
class Test1 {
public static void main(String[] args) {
int i;
for (int i = 0; i < 10; i++)
System.out.println(i);
}
}
所以在你的情况下:for循环中的int i
和JLabel i
具有相同的拼写。
所以只需改变其中任何一个的拼写例如:
for(int i = 0; i <= 80; i++) {
JLabel yourLabel = new JLabel();
this.add(yourLabel);
}
答案 3 :(得分:1)
JLabel[] jLabels = new JLabel[81];
如果你想要这么多JLabel,你可以这样做,
如果您只想解决错误,请将变量重命名为i
以外的其他内容
JLabel j = new JLabel();
答案 4 :(得分:0)
已经为外部循环定义了Int i,其中在循环内部,您已为类型JLabel声明了相同的变量名称i。外部内容具有内部循环的可见性,这使得编译器抛出已经定义的错误消息。请重命名为其他名称以避免编译错误。