2015-12-09 39 views
0

我的轉換代碼工作正常,但我似乎無法限制用戶輸入0和1以外的數字。我設法處理它在一定程度上:程序認識到這個數字(例如2),但它繼續轉換它後面的數字,而忽略了它本身並繼續前進。如果我輸入2011年,它會將其轉換爲小數點後3位(011 = 3),而不是完全打破。我假設它與第一個條件有關,但我不知道如何解決它,所以任何幫助,非常感謝。二進制到Java中的十進制轉換(跳出循環)

我正在使用JavaFX,因此使用了textfield(t3)。

int decimal = 0; 
int power = 0; 
int bin = Integer.parseInt(t3.getText()); 

while (bin != 0) { 
    int temp = bin%10; 
    if(temp > 1) { 
    break; 
    } else { 
     bin = bin/10; 
     decimal += temp * Math.pow(2, power); 
     power++; 
    } 
} 
+1

嘗試'INT斌=的Integer.parseInt(t3.getText(),2);' –

+0

你可以使用一個聲明,如果看到如果本包含0或1 – liquidsystem

回答

0

如果數字大於1,則不會突破顯示,而是拋出NumberFormatException。

int decimal = 0; 
int power = 0; 
int bin = Integer.parseInt("11"); 

while (bin != 0) { 
    int temp = bin%10; 
    if(temp > 1) { 
    throw new NumberFormatException("Invalid input"); //throw exception if input contains number greater than 0 
    } else { 
     bin = bin/10; 
     decimal += temp * Math.pow(2, power); 
     power++; 
    } 
} 
+0

謝謝,這正是我需要的! – imaginedrragon

4

您可以指定在parseInt函數調用

int bin = Integer.parseInt(t3.getText(), 2); 

將解析二進制數和非法輸入扔NumberFormatException的基數。

+0

我試圖做其他的了號碼,但那麼我的代碼其餘部分以一種有趣的方式工作,所以這次其他答案對我來說更合適。謝謝你的幫助,下次我會記住這一點! – imaginedrragon

+1

您的代碼的其餘部分工作有趣嗎?如果你聽過Neil或Elliot,你可以刪除那段代碼,因爲它不再需要,所以我懷疑它可能仍然有趣。 – mipa