Java for循环数组列表无序返回

时间:2015-10-05 04:02:28

标签: java arrays

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

我用:

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);
}

理论上应该使用具有所述名称的模型,但在控制台中它会返回:

1. Comparing platform.river with cube
Returned default Model
Returned default Model
2. Comparing platform.river with grenade
3. Comparing platform.river with plasma
4. Comparing platform.river with platform.river
5. Comparing platform.river with waterhole
1. Comparing cube with cube
2. Comparing cube with grenade
3. Comparing cube with plasma
4. Comparing cube with platform.river
5. Comparing cube with waterhole
1. Comparing waterhole with cube
2. Comparing waterhole with grenade
3. Comparing waterhole with plasma
4. Comparing waterhole with platform.river
5. Comparing waterhole with waterhole
Returned default Model

在返回null之前似乎没有完成循环!然后在第二个中它似乎完全跳过循环,然后第三个似乎在循环后返回null。有没有更好的方法来获得具有所述名称的模型?我该如何解决这个问题?

4 个答案:

答案 0 :(得分:1)

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

改为使用

if(modes.get(i).getName().equals(name)) {

您正在比较参考而不是对象的内容。你应该equals()比较它们的方法。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

改为使用gremlin> graph = TitanFactory.build().set('storage.backend','inmemory').open() ==>standardtitangraph[inmemory:[127.0.0.1]] gremlin> g = graph.traversal() ==>graphtraversalsource[standardtitangraph[inmemory:[127.0.0.1]], standard] gremlin> mgmt = graph.openManagement() ==>com.thinkaurelius.titan.graphdb.database.management.ManagementSystem@7026b7ee gremlin> buyer = (!mgmt.containsPropertyKey("buyer")) ? gremlin> mgmt.makePropertyKey("buyer").dataType(String.class).cardinality(Cardinality.SINGLE).make() : gremlin> mgmt.getPropertyKey("buyer"); ==>buyer gremlin> buyeri = mgmt.getGraphIndex("buyeri"); ==>null gremlin> if (buyeri == null) { gremlin> buyeri = mgmt.buildIndex("buyeri", Vertex.class).addKey(buyer).buildCompositeIndex(); gremlin> mgmt.setConsistency(buyeri, ConsistencyModifier.LOCK); gremlin> } ==>null gremlin> mgmt.commit(); ==>null gremlin> v = graph.addVertex("buyer", "buyer10", "name", "ten") ==>v[4184] gremlin> g.V().has("buyer", "buyer10").values("name") ==>ten 循环。

for each

此外,您正在将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进行比较