//在下面的代码行中,要求用户输入一个长度来确定常规二十面体的体积,但是,当输入程序时,总是输出0.0作为体积的答案???
import java.io.*; //allows I/o statements
class VolumeIcosahedron //creating the 'volumeIcosahedron' class
{
//allows strings with exceptions to IO = input/output
public static void main (String[] args) throws IOException
{
BufferedReader myInput = new BufferedReader(
new InputStreamReader (System.in)); //system input/ output
String stringNum; // the number string
double V; // integer with decimals volume
int L; // integer required length
//System output
System.out.println("Hello, what is the required length");
stringNum = myInput.readLine();
L = Integer.parseInt(stringNum);
V = 5/12 *(3 + Math.sqrt(5))*(L*L*L);
System.out.println("The volume of the regular Icosahedron is " + V);
}
}
答案 0 :(得分:1)
因为整数中的5/12
等于0
所以它始终会生成0
。
尝试5.0
强制划分而不涉及整数除法。
V = 5.0/12 *(3.0 + Math.sqrt(5))*(L*L*L);
答案 1 :(得分:1)
我认为这是违法行:
V = 5/12 *(3 + Math.sqrt(5))*(L*L*L);
5/12返回int
(整数),它总是被截断为0,因此0 *任何东西都会返回0。
将其更改为此,使用字母d表示这些数字为double类型:
V = 5d/12d *(3 + Math.sqrt(5))*(L*L*L);
答案 2 :(得分:1)
原因是你在计算中使用整数。 对于整数,您应该将除法视为欧几里德运算,即a = bq + r。 所以在你的程序中,5/12将始终返回0(5 = 0 * 12 + 5)。
如果将行更改为这样(将每个整数替换为double):
V = 5.D/12.D *(3.D + Math.sqrt(5.D))*(L*L*L);
然后结果会有所不同。