匿名结果:NaN

时间:2011-04-09 18:07:03

标签: java

import java.io.*;

public class frequency
{
    public static void main(String args[])
    {
        String a1, a2, a3;
        double r, l ,c, f;  //r=resistance, l=induction, c=capacitance, f=frequency

        try
        {
            BufferedReader buff=new BufferedReader(new InputStreamReader(System.in));

            System.out.print("Enter the RESISTANCE:");
            a1=buff.readLine();
            r=Double.parseDouble(a1);
            System.out.print("Enter the INDUCTANCE:");
            a2=buff.readLine();
            l=Double.parseDouble(a2);
            System.out.print("Enter the CAPACITANCE:");
            a3=buff.readLine();
            c=Double.parseDouble(a3);

            //for(c=0.01;c<=0.1;c--)
            //{
            f=Math.sqrt((1/l*c) - pow(r,2)/(4*pow(c,2)));
            System.out.print("The FREQUENCY is:"+f);
        }
            //}
        catch(Exception e)
        {}
    }
}

上面的代码是计算频率。代码正在执行,但问题是它显示的结果是我不知道的。它将结果显示为“Nan”

plz解释什么是东西&amp; !!

4 个答案:

答案 0 :(得分:1)

我敢打赌,Math.sqrt()的论点是否定的。当我System.out.println(Math.sqrt(-4))时,我会得到NaN输出。

答案 1 :(得分:0)

您可能在某处除以零,否则parseDouble无法正确解析。正如QuantumMechanic指出的那样,你也可能试图找到负数的平方根。

测试的简便方法是打印出解析后的数字。

答案 2 :(得分:0)

如前所述,它不是一个数字,它来自以下一行:

f=Math.sqrt((1/l*c)-pow(r,2)/(4*pow(c,2)));

平方根以下的值可能会变为负数(例如,对于r的较大值)。负数的平方根未在真实域中定义,因此产生NaN。

注意:公式实际应为Math.sqrt(1/(l*c)-pow(r,2)/(4*pow(c,2)));

答案 3 :(得分:0)

您对Math.sqrt()的输入是 NaN 小于零

从Javadoc for Math.sqrt();

  • 如果参数为 NaN 小于零,则结果为 NaN

我已经更改了您的代码以使其正常工作,只要您的输入有效,它就会正常工作。

  import java.io.*;

public class Frequency {

    public static void main(String args[]) {
        double r, l, c, f;  //r=resistance,l=induction,c=capacitance,f=frequency

        try {
            BufferedReader buff = new BufferedReader(new InputStreamReader(System.in));

            System.out.print("Enter the RESISTANCE:");
            r = Double.parseDouble(buff.readLine());

            System.out.print("Enter the INDUCTION:");
            l = Double.parseDouble(buff.readLine());

            System.out.print("Enter the CAPACITANCE:");
            c = Double.parseDouble(buff.readLine());

            f = Math.sqrt((1 / l * c) - Math.pow(r, 2) / (4 * Math.pow(c, 2)));
            System.out.println("The FREQUENCY is:" + f);
        }

        catch (Exception e) {
            System.out.println(e);
        }
    }
}

以下输入程序成功退出

run:
Enter the RESISTANCE:10
Enter the INDUCTION:10
Enter the CAPACITANCE:10
The FREQUENCY is:0.8660254037844386
BUILD SUCCESSFUL (total time: 12 seconds)

对于以下输入程序成功退出但打印 NAN 非数字

run:
Enter the RESISTANCE:0
Enter the INDUCTION:0
Enter the CAPACITANCE:0
The FREQUENCY is:NaN
BUILD SUCCESSFUL (total time: 9 seconds)

请提供您的意见。