我必须编写n从用户获取数字的程序,然后计算总和:s = 1/1 + 1/2 + ... + 1/n.
我写了这段代码:
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner unos = new Scanner(System.in);
System.out.println("n=?");
int n = unos.nextInt();
double s = 0.0;
for (int i = 1; i <= n; i++) {
s = s + (1.0 / i);
}
System.out.println("s=" + s);
}
}
Run Code Online (Sandbox Code Playgroud)
Java如何决定i在此语句中将int值转换为double:
s = s + (1.0 / i);
Run Code Online (Sandbox Code Playgroud)
管理将哪种类型转换/提升为Java语言规范第5章 - 转换和促销中定义的其他类型的规则.
特别是对于大多数算术运算,请查看二进制数字促销部分.
当运算符将二进制数字提升应用于一对操作数时,每个操作数必须表示数值类型的值,以下规则按顺序应用,使用扩展转换(第5.1.2节)根据需要转换操作数:
- 如果任一操作数的类型为double,则另一个操作数转换为double.
- 否则,如果任一操作数的类型为float,则另一个操作数转换为float.
在你的情况下,1.0是一个double,因此i转换为double(加宽转换).由于s已经是双倍,因此无需进一步转换.
如果类型之间没有匹配(并且将double与int分开不匹配),则选择以下之一,其中(1)具有最高优先级:
(1) identity conversion
(2) a widening primitive conversion
(3) a widening reference conversion
(4) a boxing conversion optionally followed by a widening reference conversion
(5) an unboxing conversion optionally followed by a widening primitive conversion.
Run Code Online (Sandbox Code Playgroud)
在这种情况下,它选择(2)拓宽原语.它不会将double更改为int,因为double-> int不是标识也不是加宽,所以唯一的左选择是将int加宽为double
更多信息:http://java.sun.com/docs/books/jls/third_edition/html/conversions.html#184206
| 归档时间: |
|
| 查看次数: |
11806 次 |
| 最近记录: |