二进制到十进制-java



我想写一个程序,接收字符串值并打印十进制数。

此外,如果字符串值不是1或0,我需要打印一条消息。

我写了这段代码,但它总是进入if命令的内部。

我将感谢您的支持!

谢谢

import java.util.Random; 
public class Decimal {
    public static void main(String[] args) {
        String input = (args[0]);
        int sum = 0;
        for (int i = 0; i <= input.length(); i++) {
            if (!(input.charAt(i) == '0') || (input.charAt(i) == '1')) {
                System.out.println("wrong string");
                break;
            }
            char a = input.charAt(i);
            if (a == '1') {
                sum |= 0x01;
            }
            sum <<= 1;
            sum >>= 1;
            System.out.println(sum);
        }
    }
}

if语句的!(非)运算符仅适用于第一部分:

if ( ! (input.charAt(i) == '0')
     ||
     (input.charAt(i) == '1')
   ) {

这与相同

if ((input.charAt(i) != '0') || (input.charAt(i) == '1')) {

当你真正想做的时候:

if (input.charAt(i) != '0' && input.charAt(i) != '1') {

不过,这是一件好事,因为一旦成功,当i == input.length()时,你就会得到一个IndexOutOfBoundsException。将循环更改为:

for (int i = 0; i < input.length(); i++) {

为了提高性能,向上移动变量a,并在第一个if语句中使用它。重命名为cch更具描述性/通用性。

同时执行sum <<= 1sum >>= 1会让您从起点开始。这就是你想要的吗?在设置最右边的位之前,您还应该执行左移

应用所有这些,我相信你打算这么做:

String input = args[0];
int sum = 0;
for (int i = 0; i < input.length(); i++) {
    char c = input.charAt(i);
    if (c != '0' && c != '1') {
        System.out.println("wrong string");
        break;
    }
    sum <<= 1;
    if (c == '1')
        sum |= 1;
}
System.out.println(sum);

最新更新