簡體   English   中英

charAt()和Math.pow()

[英]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值, 4857 ,所以你可以通過在乘法之前減去'0'來“減去” 48

numOut = ( (numIn.charAt(i-1) - '0') * Math.pow(baseIn, counter++));

您仍然需要驗證用戶鍵入的內容實際上是所選基數中的有效“數字”。

您還需要將numOut的值一起添加以在結尾處獲取小數結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM