gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 02:58:32 25 4
gpt4 key购买 nike

我正在研究 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com