java - 求一个数的幂

标签 java functional-programming

我的程序要求用户输入一个 2 的幂 (1,2,4,8..128) 的数字。此外,我必须将 a[number] 替换为 true 或 false。目前,我正在使用 switch 语句来执行此操作。但是,我打算编写一个计算功率的函数。我们如何优化这段代码:

switch (requested) {
    case 1:
        if (b[1] == true)
            b[1] = false;
        break;
    case 2:
        if (b[2] == true)
            b[2] = false;
        break;
    case 4:
        if (b[3] == true)
            b[3] = false;
        break;
    case 16:
        if (b[4] == true)
            b[4] = false;
        break;
    case 32:
        if (b[5] == true)
            b[5] = false;
        break;
    case 64:
        if (b[6] == true)
            b[6] = false;
        break;
    case 128:
        if (b[7] == true)
            b[7] = false;
        break;
}

最佳答案

您可以使用Integer中提供的函数:

int idx = Integer.numberOfTrailingZeros(requested); 
b[idx] = false;

我还会考虑验证用户输入,以确保它实际上是 2 的幂:

int idx = Integer.numberOfTrailingZeros(requested); 
if ((1<<idx) != requested) {
  throw new InvalidInputException(...);
}
b[idx+1] = false;

关于java - 求一个数的幂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41701325/

相关文章:

java - 从程序中的objectdb数据库中检索值

ios - Swift 编译器错误 : "Expression too complex" on a string concatenation

带参数的 Scala 传递函数

Java Hibernate 从某个索引或偏移量获取列表。

java - 当变量值改变时如何更新JTable和JTree?

java - Java 和 Android 之间的 Base64 编码/解码错误

Scala 从列表中生成唯一的对

haskell - 能否证明 call-by-need 在所有归约策略中具有最小的渐近时间复杂度?

haskell - 为什么函数组合有时需要两个 "."来组合两个函数

java - 字符串中的逗号分隔值到 vector - Java