检查没有控制结构的值

Use*_*rXY 4 java math

我正在努力解决我在作业上遇到的问题.

如何在Java中检查值是否在一个范围内,例如1≤值≤31,而不使用if,switch或任何其他控制结构?

Joh*_*ica 9

// Zero if valid, non-zero otherwise
int n = (int) Math.floor((value - 1) / 31.0);

// Convert any non-zero value to -1 (0xFFFFFFFF) without any boolean logic.
n |= n << 1;  n |= n >> 1;    
n |= n << 2;  n |= n >> 2;
n |= n << 4;  n |= n >> 4;
n |= n << 8;  n |= n >> 8;
n |= n << 16; n |= n >> 16;

// Value is either -1 or 0. Switch -1 to +1.
n = -n;

// Use array indexing to simulate a conditional.
String[] results = {"valid", "invalid"};
System.out.println(results[n]);
Run Code Online (Sandbox Code Playgroud)

请访问http://ideone.com/98sA8查看.

您甚至可以扩展它以运行不同的代码路径:

Runnable[] options = {
    new Runnable() {
        public void run() {
            System.out.println("valid");
        }
    },

    new Runnable() {
        public void run() {
            System.out.println("invalid");
        }
    }
};

options[n].run();
Run Code Online (Sandbox Code Playgroud)

请访问http://ideone.com/sUKiW查看.


the*_*ejh 7

(value-1)-((value-1+31)%31)
Run Code Online (Sandbox Code Playgroud)

0表示正确,其他任何表示错误.