【问题标题】:Equivalent of 'where' fortran keyword in Java?相当于Java中的'where'fortran关键字?
【发布时间】:2012-07-11 08:59:03
【问题描述】:

我正在编写一个 Java 程序,在该程序中我根据一个字符串检查一个列表,然后对其进行处理。在 fortran 中,我会按照

的方式写一些东西
where(list(:)==stringToCheck){
    ...
    statements
    ...
    }

相反,我对一堆 for 循环感到头疼,if 语句和中断到处都是。不,也许我可以稍微整理一下代码,但感觉它仍然比 fortran 效率低得多。

编辑,这是我使用的代码:

for(int idx=0;idx<player.get_charactersOwned().size();idx++)
            {
                if(player.get_charactersOwned().get(idx).get_characterName().equals(charName))
                {
                    /* Add character to the game
                     * Add game to the character*/
                    System.out.println("Character "+charName+" Found ");
                    gameToMake.addCharacters(player.get_charactersOwned().get(idx));
                    player.get_charactersOwned().get(idx).addGame(gameToMake);
                    break;
                }else 
                {
                    System.err.println("Character "+ charName +" not found");
                    System.out.println("Shall I add that Character? y/n ");
                    choice = scanner.nextLine();
                    if(choice.equalsIgnoreCase("y"))
                    {
                        charName = scanner.nextLine();
                        Character character = new Character(charName);
                        characterTempList.add(character);
                        player.addCharacter(characterTempList);
                        gameToMake.addCharacters(player.get_charactersOwned().get(idx));
                        player.get_charactersOwned().get(idx).addGame(gameToMake);
                        break;
                    }else{break;}
                }
            }

尽管修复这段代码很诱人,但我宁愿使用变通方法。

在不使用外部库的情况下,是否有与此等效的 Java?

【问题讨论】:

  • 如果有任何选择,您应该尝试 Scala,它也运行在 JVM 上并具有非常强大的集合 API,具有您所要求的功能。
  • "Checking list against a string"的意思是你想知道列表中是否包含字符串?
  • @PetteriHietavirta 是的,基本上。
  • 很可能你有你的理由,但将字符存储在字符串中并使用 String.indexOf() 检查是否有匹配的字符不是更简单吗?

标签: java fortran where equivalent


【解决方案1】:

不,Java 中没有等价物。相反,如果您需要检查一个字符列表(每个都有一个名称)是否包含一个字符名称,那么只需执行以下操作:

// search the name
boolean found = false;
for (Character c : player.get_charactersOwned()) {
    if (c.get_characterName().equals(charName)) {
        found = true;
        break;
    }
}

// perform the check
if (found) {
    // do something
} else {
    // do something else
}

顺便说一句,Character 对你的类来说是个坏名字,它与 Java 自己的 Character 类发生冲突。如果可能,重命名它,以避免混淆。或者,循环可以这样写:

boolean found = false;
for (int i = 0, n = player.get_charactersOwned().size(); i < n && !found; i++) {
    Character c = player.get_charactersOwned().get(i);
    if (c.get_characterName().equals(charName)) {
        found = true;
    }
}

【讨论】:

  • get_characterName() 仅在字符上运行,而不是在其列表上运行。现在希望重载该函数。
  • @Pureferret 上述(更新的)代码在列表中的每个字符上调用get_characterName(),而不是在列表本身上
  • 我已将上面的检查放入类 Player 的函数中,该函数返回一个布尔值,然后我可以在我的 main 函数中调用它。不过,我还是想知道是否有 where 的等价物。
  • 不,Java 中没有等价物
猜你喜欢
  • 1970-01-01
  • 2010-12-10
  • 1970-01-01
  • 1970-01-01
  • 2011-11-01
  • 1970-01-01
  • 2013-10-08
  • 2010-10-07
  • 2011-05-08
相关资源
最近更新 更多