2015-11-06 131 views
0

我想写一个接收字符串值并打印十进制数的程序。二进制到十进制 - 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); 
     } 
    } 
} 
+0

变化'(input.charAt(I)== '0')|| (input.charAt(i)=='1')'to'!(input.charAt(i)=='0')&&(input.charAt(i)=='1')' – JackVanier

+0

对那些像这样放置的人来说是错误的。 – SBI

+0

相当于(!(input.charAt(i)=='0'|| input.charAt(i)=='1')) – clsbartek

回答

1

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

非常感谢Andreas!作品真棒! – Dana