Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当使用for循环添加到阵列时,它将替换它之前阵列中的所有内容_Java_Arrays_For Loop_Joptionpane - Fatal编程技术网

Java 当使用for循环添加到阵列时,它将替换它之前阵列中的所有内容

Java 当使用for循环添加到阵列时,它将替换它之前阵列中的所有内容,java,arrays,for-loop,joptionpane,Java,Arrays,For Loop,Joptionpane,因此,我正在为我的cs II类做一个简单的项目,我们需要使用JOptionPane来获取所有信息,而不是扫描仪。我不知道这是不是给我造成了这个问题,或者是因为我们必须使用4个类,一个main类、一个GUI类、一个controller类和一个model类 这是我的模型类中的代码,我试图创建一个包含用户通过GUI类中的JOPtionPane输入的所有位置的数组。所以它通过控制器进入模型类 所以在代码中,它要求一个位置,然后我想把它添加到数组中。我完全理解为什么这段代码用最后输入的位置替换数组的每个元

因此,我正在为我的cs II类做一个简单的项目,我们需要使用JOptionPane来获取所有信息,而不是扫描仪。我不知道这是不是给我造成了这个问题,或者是因为我们必须使用4个类,一个main类、一个GUI类、一个controller类和一个model类

这是我的模型类中的代码,我试图创建一个包含用户通过GUI类中的JOPtionPane输入的所有位置的数组。所以它通过控制器进入模型类

所以在代码中,它要求一个位置,然后我想把它添加到数组中。我完全理解为什么这段代码用最后输入的位置替换数组的每个元素,因为它每次得到一个位置时都运行完整的for循环。我只是不知道如何解决这个问题!任何帮助都是值得的。谢谢

public void addLocation(String location) {
    for (int i = 0; i < locations.length; i++) {
        locations[i] = location;
    }
}
public void addLocation(字符串位置){
对于(int i=0;i
如果是,位置[i]不会返回位置i处的字符,而是返回字符串,该字符串被解释为true,因为它被设置为1,因此函数只会设置位置[1]=“位置”

您需要首先使用以下方法将字符串转换为字符数组:

String str = "lcoation"; 
char[] charArray = str.toCharArray();

然后在该数组上循环。

您可以按照以下方式执行操作:

//iterator attribute to keep track of current index
private int iterator = 0;

public void addLocation(String location) {
    //insert our location at the index indicated by our iterator
    locations[iterator] = location;

    //increment our iterator so we use the next position on the next function call
    iterator++;
}

因此在代码中它要求一个位置,然后我想将它添加到数组中。我完全理解为什么这段代码用最后输入的位置替换数组的每个元素,主要是您限制自己使用数组,在这种情况下,您可以尝试以下操作

private int arrayIndexCounter = 0; // make sure this is global variable

public void addLocation(String location)
{
   locations[arrayIndexCounter] = location;
   arrayIndexCounter = (arrayIndexCounter + 1) % locations.length;
}

语句arrayIndexCounter=(arrayIndexCounter+1)%locations.length确保您永远不会超出数组的边界,并保持在数组大小的限制范围内(自始至终都是locations.length独占的,因为如果arrayIndexCounter==locations.length,您的arrayIndexCounter会自n%n==0起将自身设置回零)。希望有帮助???

我会使用
列表而不是数组,这样您就可以随意添加和删除元素,并调用
locations.toArray(新字符串)[locations.size()])
每当需要数组时。

什么意思“每次获得一个位置时,它都在运行完整的for循环”?您是代码编写者,您编写了一个for循环来替换数组中的每个元素。如果您不想替换数组中的每个元素,请不要编写一个for循环来替换数组中的每个元素。如果没有适当的索引检查,当迭代器++超过或等于ls locations.lengthTrue,在最后一个程序中,您需要对C进行适当的索引检查。虽然我也希望首先使用列表而不是数组。这里的一些人有复制粘贴解决方案的想法,因此当复制粘贴的代码在他们这方运行时,会发生灾难。因此,我们确保我们的解决方案不是打开的e对执行复制粘贴的代码后发生的灾难负责:),并且您对java.util.Listthank的使用是非常正确的。谢谢您,这很有帮助。我想我要做的是在iterator++之前添加一个if语句,并说if(iterator