2015-11-06 178 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