2013-12-06 5 views
-3

Я новичок в Java. Может ли кто-нибудь объяснить мне эту строку?Каково объяснение этой строки java?

Math.sqrt(6 * (1 until 10000).map(x => (1/Math.pow(x.toDouble, 2))).sum) 
+4

Непохоже, Java мне. –

+1

Это [Scala] (http://scala-lang.org/), а не Java. – user2864740

+0

Я не думаю, что это Java. Я могу понять, что это может быть Java 8 из-за выражения лямбда. Но 'до' все еще не является ключевым словом Java (даже в Java 8). –

ответ

0

Это не Java.

Это больше похоже на Scala.

Я думаю, что в Java это будет выглядеть следующим образом:

double y=0d; 
for(int x=1;x< 10000; x++){ 
    y+=(1/Math.pow(x,2); 
} 
y = 6*y; 
Math.sqrt(y); 
+0

Хорошо, это Скала, моя плохо. Благодарим вас за переписывание кода для меня, поскольку я не знаком с синтаксисом Scala. Меня заинтересовало конечное значение этого исчисления, которое оказалось π :) – user3024859

4

Это называется ошибка синтаксиса.

Ваш код не является Java или вы неправильно понимаете свое задание.

1

Код Scala, не Java.


В любом случае выражение может быть разбито, как ..

val fn = (x: Int) => 1/Math.pow(x.toDouble, 2) 
val inner = (1 until 10000).map(fn).sum 

.. который читает что-то вроде:

Для всех целых чисел в диапазоне [1, 10000), превратить их через функцию f(x) -> 1/pow(x,2) и суммировать результат.

Тогда что бы это ни было, используйте его в качестве входных данных для окончательного sqrt.

Math.sqrt(6 * inner) 
0

В Java 8, это было бы:

Math.sqrt(6 * IntStream.rangeClosed(1, 10000) 
         .mapToDouble(x -> (1.0/Math.pow((double)x, 2.0))) 
         .sum()) 
Смежные вопросы