java为什么会出现“xxx已定义”编译器错误?
我正在尝试使用threadname1、threadname2等变量创建多个线程,。。threadnamen。我没有把它作为硬编码的值,而是尝试对n个数字使用for循环,并在“threadname”字符串的末尾使用它。它抛出了一些错误。如何解决此问题
public class RunnableExample{
public static void main(String[] args){
String Name = "";
String Ip = "";
for (int i=1; i<=2; i++){
if(i == 1){
Name = "irony";
Ip = "82.209.27.24";
}
else{
Name = "jocky";
Ip = "98.12.098.56";
}
String runname = "threadname" + i;
RunnableThread runname = new RunnableThread(Name,Ip);
new Thread(runname).start();
}
//RunnableThread threadname1 = new RunnableThread("irony","82.209.27.24");
//RunnableThread thread4 = new RunnableThread("jocky","98.12.098.56");
//new Thread(threadname1).start();
//new Thread(threadname2).start();
try{
}
catch (InterruptedException e) {
}
}
输出:
bash-3.00# javac RunnableExample.java
RunnableExample.java:43: runname is already defined in main(java.lang.String[])
RunnableThread runname = new RunnableThread(Name,Ip);
我如何解决这个问题?看起来可能需要一些打字。我不确定
# 1 楼答案
可能是打字错误,您想键入:
# 2 楼答案
您必须更改包含线程名称的变量的名称:
如果您使用Java,最好使用Java命名约定。例如,所有变量都以小写开头
您可能希望这样做:
资源:
# 3 楼答案
这就是你的问题:
您试图声明两个同名的变量。你不能那样做。更改其中一个变量的名称。在Java中,变量的名称在编译时是固定的。你不能说“声明一个名为这个变量的执行时间值的变量”,我想你正试图这么做
如果需要访问多个值的方法,请使用集合或数组。例如,您可能需要一个
List<RunnableThread>
在这里-在循环的每个迭代中将值添加到列表中我还强烈建议您在开始尝试线程之前,确保了解Java的基础知识(如变量和集合)。线程是复杂的,并且很难推理——如果你在与核心语言作斗争,它将变得更加困难
# 4 楼答案
我不会费心指出你发布的代码的问题,因为其他人已经有了。然而,我建议您不要使用for循环,如果您要在其中执行if检查以查看您正在进行哪个迭代。这不是一个好的做法。事实上,非迭代解决方案实际上是更少的代码行和更干净的
像这样的事情会做你正在尝试的事情。我知道你说过你想让它处理N个线程。我的解决方案仍然比你所遵循的模式更清晰;为不同的threadName值在每个迭代中添加if检查