Java Help帮助输入的方程式无效

时间:2013-02-18 17:56:16

标签: java

//在下面的代码行中,要求用户输入一个长度来确定常规二十面体的体积,但是,当输入程序时,总是输出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);  
  }
}

3 个答案:

答案 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);

然后结果会有所不同。