繁体   English   中英

我想知道这是否是一种很好的编程习惯,否则我如何才能更好,更高效地编写程序

[英]I want to know if this is a good programming practise else how can i write the program more optimal and efficient

我想编写将十进制转换为二进制,然后在其中不使用诸如Integer.toBinary()之类的功能的情况下,找到连续的1的程序。我的程序是:

public class Practise {

static String decimalToBinary(int num) {
    String binaryN = "";
    while (true) {
        binaryN += num % 2;
        num = num / 2;

        if (num == 1) {
            binaryN += 1;
            break;
        }
    }
    String nBinary = "";
    for (int i = binaryN.length() - 1; i >= 0; i--) {
        nBinary += binaryN.charAt(i);
    }
    System.out.println(nBinary);
    return nBinary;
}

static int consecutiveOnes(String binaryN) {
    int consecutive = 0;
    int max = 0;
    boolean isFreshStart = false;
    for (int i = 0; i < binaryN.length(); i++) {

        if (binaryN.charAt(i) == '1') {
            if (isFreshStart) {
                consecutive = 1;
                isFreshStart = false;
            } else
                consecutive++;

        } else {
            isFreshStart = true;

        }
        if (consecutive > max)
            max = consecutive;
    }
    return max;
}

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int n = in.nextInt();
    String binaryN = decimalToBinary(n);
    System.out.println(consecutiveOnes(binaryN));
}

}

如果不是我的程序是最优的,那么如果要更优化,该如何预先感谢。

如果您的目标是计算连续的1,那么最好根本不转换为二进制字符串。

您可以使用位移对位进行迭代:

int work = num;
while (work > 0) {
    int bit = work & 1;
    work >>= 1;
    // Todo: count consecutive 1s
}

这种方法将使用更少的存储空间(基本上是单个int而不是String ),并且工作速度更快,而无需创建其他对象和不必要的中间类型转换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM