Java for循环遍历数组列表返回的顺序不正确
很抱歉标题的措辞很奇怪,这是我的问题:我正在用java制作一个游戏,我有一个模型库类,它将特定文件夹中的所有模型加载到一个模型数组列表中。我的代码可以很好地加载模型,但问题是从数组列表中获取具有特定名称的模型 我使用: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 + "
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");
}