0

我正在尝试做一个简单的编程挑战,但我遇到了 Math.pow() 函数的一个奇怪且不相关的问题。

我得到 6 的 1 次方是 54?

我正在读取在命令行中输入的文件(通过 args[0])。该文件仅包含三个数字:

6
75
153

我正在运行的程序如下:

public static void main (String[] args)throws IOException{

    File filename = new File(args[0]);
    Scanner file = new Scanner(filename);

    while(file.hasNextLine()){
        String numbers = file.nextLine();
        int numValue = Integer.parseInt(numbers);

        int sumOfPowers = 0;

        for(int i = 0; i < numbers.length(); i++){
            sumOfPowers += Math.pow(numbers.charAt(i), numbers.length());
            System.out.println(Math.pow(numbers.charAt(i), numbers.length()));
            System.out.println(Math.pow(6, 1));
        }

    }
    file.close();
}

这产生的输出是奇怪的。基于这些类型的值创建幂函数是否违反 Java 规则?

我得到的输出:

54.0
6.0
3025.0
6.0
2809.0
6.0
117649.0
6.0
148877.0
6.0
132651.0
6.0
4

3 回答 3

8

我认为这里的主要误解是'6'!=6 如果它们相同,则不需要使用不同的文字。相反,ASCII'6'(int) '6'54

在此处输入图像描述

于 2013-08-13T07:32:20.727 回答
3

这是因为字符的 ascii 值为654。现在检查您的代码:

Math.pow(numbers.charAt(i)
于 2013-08-13T07:31:58.080 回答
1

这里numbers.charAt(i)返回 achar '6'和 NOT int 6

ASCII 中的值char '6'是整数值 54。'0' 是 48,'1' 是 49,依此类推。

只需从数字 0 重置计数。

Math.pow(numbers.charAt(i) - '0', numbers.length());
于 2013-08-13T07:40:28.890 回答