为什么我得到"xxx已定义"编译器错误?

-1 java compiler-construction

我试图使用像threadname1,threadname2,.. threadnamen这样的变量创建多个线程.我没有将它作为硬编码值给出,而是尝试使用for循环获取n个数字,并在"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) {

        }
    }
Run Code Online (Sandbox Code Playgroud)

输出:

bash-3.00# javac RunnableExample.java
RunnableExample.java:43: runname is already defined in main(java.lang.String[])
            RunnableThread runname = new RunnableThread(Name,Ip);
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?似乎需要一些类型转换.我不确定.

Jon*_*eet 10

这是你的问题:

String runname = "threadname" + i;
RunnableThread runname = new RunnableThread(Name,Ip);
Run Code Online (Sandbox Code Playgroud)

您正在尝试使用相同的名称声明两个变量.你不能这样做.更改其中一个变量的名称.变量名在Java中的编译时是固定的.您不能说"使用变量的执行时间值的名称声明变量",这是我认为您正在尝试执行的操作.

如果您想要一种访问多个值的方法,请使用集合或数组.例如,您可能需要List<RunnableThread>这里 - 在循环的每次迭代中将值添加到列表中.

我还强烈建议您开始尝试使用线程之前确保了解Java的基础知识(比如变量和集合).线程很复杂,很难推理 - 如果你正在努力学习核心语言,那就更难了.