【问题标题】:Check if number is in a number list检查号码是否在号码列表中
【发布时间】:2014-03-07 21:47:14
【问题描述】:

我是编程新手,我正在尝试弄清楚如何创建一个这样的数字列表(5、10、15、20、25,一直到 500)然后能够检查玩家是否得分等于这些数字中的任何一个。

到目前为止,我的代码是这样的。它可以工作,但前提是得分为 5。

private void drawPower() {

    if (myWorld.getScore() == 5) {
        batcher.draw(Power, pipe3.getX(), pipe3.getY() + pipe3.getHeight()
                + 30, 20, -14);

    }

}

我需要知道需要做什么而不是

if (myWorld.getScore() == 5) {

应该是

if (myWorld.getScore() == "any number in the list") {

【问题讨论】:

  • 数字总是像 5 这样的普通数字的倍数吗?
  • collection.contains ? (一组是合适的)

标签: java arrays list arraylist


【解决方案1】:

我不会使用从 5 到 100 的 5 的倍数的数组。

我会检查它是否是 5 的倍数,以及它是否在 5500 之间。

int score = myWorld.getScore();
if (score >= 5 && score <= 500 && score % 5 == 0) {

【讨论】:

  • 你真的从那棵树上看到了森林。
  • +1 但是我认为score % 5 == 0 应该是第一个,因为它最有可能是错误的(懒惰评估)
  • 非常感谢!这行得通!我无法使用“int score = myWorld.getScore(); 出于某种原因它抛出异常并导致游戏崩溃。我只是手动输入 myWorldGetScore() 3 次,它工作了
【解决方案2】:

@rgettman 的回答绝对是最好的方法。然而,更一般地回答这个问题(因为它可能会再次出现):

if(Arrays.asList(5, 10, 15, 20).contains(myWorld.getScore()))

但是,如果这些数字有任何类型的模式,那么像 rgettman 的解决方案肯定会更好。这是如果数字或多或少是任意的。

【讨论】:

  • 您可以使用二进制搜索,因为数字在原始集合中是有序的。这将在O(logn) 而不是O(n) 中运行
  • @ZouZou 有内置的二进制搜索吗?有时,写作的简单性比运行时更有价值。但是是的,二分查找肯定更快。
  • Collections.binarySearch
  • @ZouZou 啊酷。我稍后会更新答案。我得走了。
【解决方案3】:

由于数组包含从 5 到 500 的所有数字(步长为 5),因此:

public hasScore(int score) {  
   int position = (score/5) - 1;  
   return arrray[position] == score;  
}  

即分数应该在位置 (i/5) - 1(因为 5 在索引 0 中,10 在索引 1 中)等等。
所以检查分数是否确实在预期的位置,它应该是

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-21
    • 2013-10-30
    • 2015-01-15
    相关资源
    最近更新 更多