java - 如何检查一个区间是否包含2的幂

标签 java

我正在研究 Java。我需要以下方面的帮助。那么,给定一个特定的区间(int low,int high),我们如何检查它是否包含任何 2 的幂的数字?我检查一个数字是否是二的幂的方法是:

private static boolean isPowerOfTwo(int n){
    if( n == 0 || n == 1){
        return false;
    } else if( (n & -n) == n ){
        return true;
    }
    else{
        return false;
    }
}

我用来检查区间内是否有任何 2 的幂的数字的方法是:

private static boolean ContainsPowerOfTwo(int low, int high){
    boolean f = false ;
    if (isPowerOfTwo(low) || isPowerOfTwo(high)){
        return true;
    }
    for (int i = low; low <= high; i++){
        if ( (low & -low ) == low && low!=0 && low!=1 ) {
            f = true;
            break;
        }
    }
    if ( f == true ){
        return true;
    }else{
        return false;
    }

}

显然,我做错了什么。如果我将间隔设置为:(0, 1),我的主程序上不会收到任何消息:

int high = readInt(" Please insert the number: ");
                rgen = new RandomGenerator();
                int random = (int) rgen.nextInt(0, high);
                while (valid){
                    if(high<0) { 
                        println( " The highest value must be positive. ");
                        high = readInt(" Please insert the highest value: ");
                    }else if(ContainsPowerOfTwo(0, high)==false){
                        println(" There are no power of two numbers in this interval.");
                        println("-1");
                        valid = false;
                        break;
                    }else{  
                        valid=false;
                    }   
                }   

                while(flag2){
                    if(isPowerOfTwo(random) == false) {
                        rgen = new RandomGenerator();
                        random = (int) rgen.nextInt(0, high);
                    }else{
                        println(" The random generated number that is power of two is: " + random);
                        flag2=false;
                    }
                }

您能帮我找到问题吗?

最佳答案

您可以使用长函数来简化此操作。

public static boolean powerOf2InRange(long low, long high) {
    return Long.bitCount(low) == 1 ||
            Long.bitCount(high) == 1 ||
            Long.highestOneBit(low) != Long.highestOneBit(high);
}

关于java - 如何检查一个区间是否包含2的幂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34472386/

相关文章:

java - 如何从 maven java 项目加载外部属性文件

java - JIRA REST API,java请求/响应

java - 只有当前 Activity 类,应该得到监听器的回调,而不是所有类,java

java - 如何使用 API 和 Glide 查看图像信息何时丢失

java - 如何并发运行ScheduledThreadPoolExecutor

java - Picture.writeToStream() 没有写出所有位图

java - 使用 @component 定义 bean 并从 XML 读取列表时出错

java - 除非在 @Test 中声明驱动程序实例,否则无法使 Actions.class 方法工作

java - Xtext,多文件交叉引用

java - 如何在编码/解码期间忽略基类?