Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.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 - Fatal编程技术网

Java for循环遍历数组列表返回的顺序不正确

Java for循环遍历数组列表返回的顺序不正确,java,arrays,Java,Arrays,很抱歉标题的措辞很奇怪,这是我的问题:我正在用java制作一个游戏,我有一个模型库类,它将特定文件夹中的所有模型加载到一个模型数组列表中。我的代码可以很好地加载模型,但问题是从数组列表中获取具有特定名称的模型 我使用: public RawModel getModel(String name){ for(int i =0;i< modes.size();i++){ System.out.println((i+1)+". Comparing " + name + "

很抱歉标题的措辞很奇怪,这是我的问题:我正在用java制作一个游戏,我有一个模型库类,它将特定文件夹中的所有模型加载到一个模型数组列表中。我的代码可以很好地加载模型,但问题是从数组列表中获取具有特定名称的模型

我使用:

public RawModel getModel(String name){
    for(int i =0;i< modes.size();i++){
        System.out.println((i+1)+". Comparing " + name + " with " + modes.get(i).getName());
        if(modes.get(i).getName() == name){
            System.out.println("Returned model " + modes.get(i).getName());
            return modes.get(i);

        }
    }
    System.err.println("Returned default Model");
    return modes.get(0);
}
在返回null之前,它似乎没有完成循环!然后在第二个循环中,它似乎完全跳过了循环,然后第三个循环似乎在循环后返回null。有没有更好的方法获得具有上述名称的模型?如何解决此问题

if(modes.get(i).getName() == name){
改用

if(modes.get(i).getName().equals(name)) {
您正在比较引用,而不是对象的内容。您应该使用
equals()
方法来比较它们。

首先在这一行: modes.get(i).getName()==name
比较两个字符串时,您使用==而不是
。equals(name)

比较字符串时,使用.equals()而不是==因为带字符串的==指指针位置,所以使用.equals()比较字符串的内容

对每个
循环使用

public RawModel getModel(String name){
    for(String modeName: modes) {
       System.out.println("Comparing " + name + " with " + modeName);
       if(name.equals(modeName)){
           System.out.println("Returned model: " + modeName);
       }
    }
    System.out.println("Returning default model");
}

此外,您正在将
字符串
与RawModel进行比较

比较字符串是错误的。比较字符串时使用等于而不是==
public RawModel getModel(String name){
    for(String modeName: modes) {
       System.out.println("Comparing " + name + " with " + modeName);
       if(name.equals(modeName)){
           System.out.println("Returned model: " + modeName);
       }
    }
    System.out.println("Returning default model");
}