2013-08-13 2 views
0

Я пытаюсь сделать простой вызов программирования, и я сталкиваюсь с причудливой и несвязанной проблемой с функцией Math.pow().Java's 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 
+0

вторая строка 6^1 и выводит 6 прекрасно –

+0

Да, так вопрос почему он дает мне 54 на линии выше, когда значения внутри также 6 и 1 – leigero

+0

это также поможет лучше, если вы загрузите содержимое файла ur –

ответ

8

Я думаю, что главное заблуждение в том, что '6' = 6 Если бы они были одинаковыми, вам не нужно было иметь разные литералы. Вместо этого ASCII для '6' - (int) '6' или 54.

enter image description here

3

Это обусловлено значением ASCii характера 6 является 54. Теперь проверьте ваш код:

Math.pow(numbers.charAt(i) 
+0

, конечно. Благодарю. – leigero

+1

@leigero np, просто примите ответ, если найдете его полезным. Практика принятия ответов помогает другим, сталкивающимся с одной и той же проблемой. –

1

Здесь numbers.charAt(i) возвращает char '6' и НЕ int 6.

Значение char '6' в ASCII является целым значением 54. '0' равно 48, '1' равно 49 и так далее.

Просто сбросить подсчет с номером 0.

Math.pow(numbers.charAt(i) - '0', numbers.length());