对偶数/奇数Java的测试

时间:2016-03-05 23:59:58

标签: java testing types integer

这项测试会有效吗?:

if (testInt/2).ofType(Integer){
    //to-do if even
}

我认为如果编译器在testInt/2之前解析ofType(),是这样的吗?

4 个答案:

答案 0 :(得分:4)

最好的方法是使用模数运算符。

if (testInt % 2 == 0)
{
//Do stuff
}

//3 % 2 = 1  , therefore odd
//4 % 2 = 0  , therefore even

模数只是从除法中得到余数。

答案 1 :(得分:2)

使用模数运算符有效,但有更好的方法可以检查。所有偶数的最低有效位为0,赔率为1。使用1执行按位AND操作将清除除LSB之外的所有操作。检查该位以确定整数的奇偶校验。使用较少的内存来清除位而不是计算余数。

if ((testInt & 1) == 0) //Even Number
if ((testInt & 1) == 1) //Odd Number
/*
  4 & 1 = 0
  5 & 1 = 1
  1342424 & 1 = 0
  5987833 & 1 = 1
*/

答案 2 :(得分:0)

  

此测试是否有效?

没有。表达式执行整数除法(因为两个操作数都是整数),并且表达式的结果始终具有类型int。例如,

   1 / 2 =>  0   // not 0.5
   2 / 2 =>  1   
  -3 / 2 => -2   // not -1.5  or -1 ... 
                 // integer division rounds towards minus infinity
  

我认为如果编译器在ofType()之前解析testInt / 2;是这样的吗?

编译器在编译时解析静态类型testInt/2,同时在运行时执行instanceof测试。

但是,您的假设不正确,因为它基于不正确的理解表达式和键入。

  • 表达式的编译时类型不依赖于操作数的。它只取决于操作数的编译时类型。

  • 对于基本类型,没有多态性,因此运行时类型和编译时类型相同。

正如@Cameron C所述,进行测试的正确方法是使用模数运算符%

@ styro的方法有效,但是:

  • 不太可读(IMO)
  • 可能更慢
  • 如果速度更快,可能无关紧要。

答案 3 :(得分:0)

试试这段代码......

public static boolean isEven (int testInt) {
    int i=0;
    while (i <= testInt) {
        if (i==testInt) return true;
        i+=2;
    }
    return false;
}