我正在使用Java来制作Uno游戏。我有一个名为findCard(String cardname)
的方法,其功能是在用户输入卡片名称(例如:"Red 6"(时在一手卡片中找到卡片,如果找不到卡片,则返回 null。当我尝试类似的东西时,它工作正常:
String card = "Red" + " " + "6";
pHand.findCard(card); // return the card Red 6
但是,在游戏中,我需要用户编写一个完整的命令,例如"deal Red 6"。因此,我使用StringTokenizer
将卡的名称与命令分开:
StringTokenizer scan = new StringTokenizer(input);
String cmd = scan.nextToken(); // = "deal"
String color = scan.nextToken(); // = "Red"
String card = color + " " + scan.nextToken(); // = "Red 6"
问题是当我在这种情况下尝试pHand.findCard(card);
时,无论输入什么,它都只返回 null。 我对StringTokenizer
的了解是它可以将单词拆分为一个字符串,所以我看不出它们有什么不同。因此,如果有人能指出原因和解决方案,那就太好了。
评论已经有了解决方案...但是要围绕它提供更多建议:
您的问题
您只是在颜色和数字之间缺少一个空格。
一般建议
在- 比较之前,请确保所有情况都相同(例如,所有下/高(。
- 处理令牌时删除空格。
- 保持变量分开;卡片值和卡片颜色都是唯一且有用的,将它们放回一个字符串中会使它们不那么有用且更难使用,并且可能会引入像您这样的错误。
建议
修改 findCard(( 以接受 2 个字符串,一个带有卡片值,一个带有颜色。 此外,如果您使用"红色 6"作为地图或其他东西中的键,请:
- 确保使用在执行此操作时使用的函数从"红色"和"6"构建"红色 6"。 这样,您就可以对函数进行单元测试,并确保不会在一个位置添加空格并在另一个位置忘记它。 通常,在复制代码的任何地方,您都可能会搞砸 - 所以不要重复。
- 使"card"成为类并覆盖等于和哈希代码,以便在确定相等性时同时使用这两个值。 然后,您可以使用卡片作为地图中的钥匙。
另外,我有点同意那个说字符串spit((会更容易的人(只是因为你在代码中更频繁地看到它(。 但是,如果您感到舒适,两者都应该有效;所以,如果你:)开心,就按照你的方式去做。