【问题标题】:Or operand with int in if statement或 if 语句中带有 int 的操作数
【发布时间】:2013-02-20 03:29:52
【问题描述】:

我的问题是程序没有像我预期的“他”那样读取代码。

我有

if (hero.getPos() == (6 | 11 | 16)) {
    move = new Object[] {"Up", "Right", "Left"};
} else {
    move = new Object[] {"Up", "Down", "Right", "Left"};
}

当 hero 位置为 6 时,程序仍转到 else。

这是为什么呢?是因为操作数吗?如果是,我应该如何改变它?

【问题讨论】:

  • Python: if a in (1,2,5): ... 如果这些是你知道的常量,那么你可能会做一些小把戏。如果数字列表很大,则将它们放入一个集合中,并检查 ci.getNumber() 是否也在该集合中。
  • 比较值后你想做什么?
  • 你必须为每个被测试的值做单独的==
  • 所以没有像我这样简单的方法吗?
  • 只是不要添加中断-> case 6: case 11: case 16: dosmt(); break;

标签: java eclipse int operand


【解决方案1】:

其他答案都是正确的,只是你可能会使用 Sets 的想法不同。

static final Set<Integer> positions = new HashSet<Integer>();
static{
    positions.add(6);
    positions.add(11);
    positions.add(16);
}

if (positions.contains(hero.getPos())){
    move = new Object[] {"Up", "Right", "Left"};
} else {
    move = new Object[] {"Up", "Down", "Right", "Left"};
}

【讨论】:

    【解决方案2】:

    (6 | 11 | 16) 将首先被评估为 31(二元运算),即 6 != 31。不是你想要的。

    更好的是检查每个位置(你只有 3 个,所以内联很好,更多考虑使用循环):

    if (hero.getPos() == 6 || hero.getPos() == 11 | hero.getPos() == 16)) {
        move = new Object[] {"Up", "Right", "Left"};
    } else {
        move = new Object[] {"Up", "Down", "Right", "Left"};
    }
    

    【讨论】:

      【解决方案3】:

      你不能那样做。它按位或 3 数。

      你必须这样做:

      if (hero.getPos() == 6 || hero.getPos() == 11 | hero.getPos() == 16)) {
          move = new Object[] {"Up", "Right", "Left"};
      } else {
          move = new Object[] {"Up", "Down", "Right", "Left"};
      }
      

      你看出区别了吗? | 是按位或,而 || 是逻辑或。 另请注意,您必须每次都重写比较。

      【讨论】:

        【解决方案4】:

        用途:

        if (hero.getPos() == 6 || hero.getPos() == 11 || hero.getPos() == 16)) {
        

        这会做你想做的。

        您所做的是将hero.getPos()(6|11|16) 的结果进行比较,这将在这些数字之间进行bitwise or

        【讨论】:

        • 我正在添加它:)
        【解决方案5】:
        boolean theyAretheSame = num1 == num2 ? (num1 == num3 ? true:false):false;
        

        我必须承认我没有检查过这个,但逻辑看起来是正确的。

        【讨论】:

        【解决方案6】:

        没有这样的运算符。但是,如果您要比较数字,则可以使用 switch 进行模拟。方法如下:

        int aNumber = ci.getNumber();
        swithc(aNumber) {
            case 6252001:
            case 5855797:
            case 6251999: {
                ...
                break;
            }
            default: {
                ... // Do else.
            }
        }
        

        希望这会有所帮助。

        【讨论】:

        【解决方案7】:

        不..您必须单独比较它们。

        【讨论】:

        【解决方案8】:

        没有。您可以创建一个 Set&lt;Integer&gt; 一次然后使用它,或者只是:

        int number = ci.getNumber();
        if (number == 6252001 || number == 5855797 || number == 6251999)
        

        我还会考虑将这些数字更改为常量,以便获得更有意义的代码。

        【讨论】:

        【解决方案9】:

        使用来自的答案:

        How can I test if an array contains a certain value?

        您可以创建一个数字数组并检查您的 ci.getNumber() 是否在其中。

        【讨论】:

        【解决方案10】:

        Java 不会让你这样做。你可以做一个哈希查找(这有点过头了)或一个 case 语句,或者一个大喇叭丑陋的多重比较:

        if ((n==1 ) || (n==2) || ...
        

        【讨论】:

        【解决方案11】:

        不,您需要为每个值检查ci.getNumber() == ...,或者将它们添加到集合中并检查myCollection.contains(ci.getNumber())。但是,如果您根据几个已知值检查方法,您可能需要重新考虑代码的结构。

        【讨论】:

        【解决方案12】:

        您可以将所有数字放在一个集合中,然后使用contains() 方法。除此之外,我不相信有任何特殊的语法可以像你想要的那样进行比较。

        【讨论】:

        猜你喜欢
        • 2021-01-27
        • 1970-01-01
        • 1970-01-01
        • 2022-10-15
        • 2020-12-27
        • 1970-01-01
        • 2014-03-02
        • 2019-09-07
        相关资源
        最近更新 更多