[英]charAt() and Math.pow()
我正在為類賦值創建一個簡單的基本轉換器。 我已經接近完成,但是需要整理轉換算法以將用戶輸入的值(以給定的基數)轉換為以10為基數的值。
import java.util.Scanner;
public class BaseConverter {
public static void main(String[] args) {
String numIn, intro1, prompt1, prompt2, output1;
int baseIn;
double numOut;
boolean flag = true;
Scanner kb = new Scanner(System.in);
intro1 = "This program converts values in different number bases to a decimal value.";
prompt1 = "Type in a number base (2 - 9): ";
while (flag == true){
System.out.println(intro1);
System.out.println(prompt1);
baseIn = kb.nextInt();
//Checking base value for outliers outside given range
if (baseIn < 2 || baseIn > 9) {
System.out.println("Base must be between 2 and 9");
System.exit(1);
}
prompt2 = "Type in a base "+baseIn+" number: ";
System.out.println(prompt2);
numIn = kb.next();
// System.out.println(numStore);
int counter = 0;
// Let's pretend baseIn is 3 and i starts at 3
for (int i = numIn.length(); i >= 1; i--){
numOut = (numIn.charAt(i-1) * Math.pow(baseIn, counter++));
System.out.println(numOut);
}
}//while
}// method
}//class
此行不返回預期值
numOut = (numIn.charAt(i-1) * Math.pow(baseIn, counter++));
例如,在字符串“ 10”中,在for循環的第一次迭代中numOut應該為(0 *(2 * 0))或零。 相反,它返回48.0。
我有一個偷偷的懷疑,它與charAt()方法有關,因為調試Math.pow()方法顯示它返回了期望值。 假設這與所有不同的變量類型有關? 我不確定。
是的,您是對的charAt
是問題所在。
當您輸入“ 10”時,根據Java用於編碼字符的編碼表,字符'0'
的整數值為48,對於'1'
”,其值為49。
如果看一下,您會看到0編碼為0x0030 = 3*16^1 = 48
編碼為0x0031 = 3*16^1 + 1*16^0 = 49
,依此類推。
如果要獲取角色本身的數值,可以使用
numOut = Character.getNumericValue(numIn.charAt(i-1)) * Math.pow(baseIn, counter++);
charAt
方法返回輸入的char
,在本例中為'0'
,而不是0
。 char
'0'
的Unicode值不為0
,而是48
。
幸運的是,值'0'
到'9'
分別是連續的Unicode值, 48
到57
,所以你可以通過在乘法之前減去'0'
來“減去” 48
。
numOut = ( (numIn.charAt(i-1) - '0') * Math.pow(baseIn, counter++));
您仍然需要驗證用戶鍵入的內容實際上是所選基數中的有效“數字”。
您還需要將numOut
的值一起添加以在結尾處獲取小數結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.