java - 二进制转十进制 - java

标签 java binary decimal

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

此外,如果字符串值不是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') {

不过这是一件好事,因为一旦成功,您将获得 IndexOutOfBoundsExceptioni == input.length() 。将循环更改为:

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);

关于java - 二进制转十进制 - java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33569744/

相关文章:

c++ - 在没有循环的情况下从 C++ 中的 int 中提取 n 个最重要的非零位

ASP.NET MVC 3 在 SQL Server 2008 的模型中显示十进制值(18,1)

java - 如何使用 java 有效地加载 native 共享对象

java - 如何使用 Java 生成可打印(和可保存)的表单?

java - Spring的CAS服务属性中如何正确设置服务URL

c# - double 类型的问题与区域设置有关

java - 如何在 JSTL 中舍入正负小数?

java - 如何让android程序等待两个按钮被按下?

c++ - C++ 中用于字节 block 随机读/写的基本文件 I/O

c++ - 将 2 字节数分成两个 1 字节