匿名结果:NaN import java.io.*; 公共类频率 { 公共静态void main(字符串参数[]) { a1、a2、a3串; 双r,l,c,f;//r=电阻,l=感应,c=电容,f=频率 尝试 { BufferedReader buff=新的BufferedReader(新的InputStreamReader(System.in)); System.out.print(“输入电阻:”); a1=buff.readLine(); r=Double.parseDouble(a1); System.out.print(“输入电感:”); a2=buff.readLine(); l=Double.parseDouble(a2); 系统输出打印(“输入电容:”); a3=buff.readLine(); c=双精度。双精度(a3); //对于(c=0.01;c

匿名结果:NaN import java.io.*; 公共类频率 { 公共静态void main(字符串参数[]) { a1、a2、a3串; 双r,l,c,f;//r=电阻,l=感应,c=电容,f=频率 尝试 { BufferedReader buff=新的BufferedReader(新的InputStreamReader(System.in)); System.out.print(“输入电阻:”); a1=buff.readLine(); r=Double.parseDouble(a1); System.out.print(“输入电感:”); a2=buff.readLine(); l=Double.parseDouble(a2); 系统输出打印(“输入电容:”); a3=buff.readLine(); c=双精度。双精度(a3); //对于(c=0.01;c,java,Java,您可能在某处被零除,或者parseDouble解析不正确。正如QuantumMechanical指出的,您也可能试图找到负数的平方根 测试的简单方法是打印出解析后的数字。我打赌Math.sqrt()的参数是负数。当我执行System.out.println(Math.sqrt(-4))时,我得到NaN输出。如前所述,它不是一个数字,它来自以下行: import java.io.*; public class frequency { public static void main(Str

您可能在某处被零除,或者
parseDouble
解析不正确。正如QuantumMechanical指出的,您也可能试图找到负数的平方根


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

我打赌Math.sqrt()的参数是负数。当我执行
System.out.println(Math.sqrt(-4))
时,我得到
NaN
输出。

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

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)
        {}
    }
}
平方根以下的值可能变为负值(例如,对于较大的
r
)。负数的平方根未在实数域中定义,因此产生NaN

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

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

来自Javadoc for Math.sqrt()

  • 如果参数为NaN小于零,则结果为NaN
我已经更改了你的代码,使它工作,只要你的输入是有效的

f=Math.sqrt((1/l*c)-pow(r,2)/(4*pow(c,2)));
对于以下输入,程序成功退出

  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);
        }
    }
}
对于以下输入程序,输入程序成功退出,但打印出NAN不是数字)


请提供您的输入。

无需大声喊叫。我们可以很好地阅读。发生这种情况时,您输入了什么值?此代码不会编译。您的pow方法在哪里?我建议您只执行
r*r
而不是
pow(r,2)
。这不会有太大的区别,但如果这是一个循环,它会有很大的区别。霍华德代码是绝对正确的,因为当我根据它编辑代码时,会给两个“POW”都带来两个错误消息,即找不到符号,但是你对平方负性的看法是正确的&它现在工作了,谢谢:)请使用小写字母,你让这个网站看起来很丑陋,很糟糕;)顺便说一句,你使用的是NETBEANS??是的,这是我最喜欢的想法之一。我会在几天后尝试,所以更多的问题正在进行中,请准备:)
run:
Enter the RESISTANCE:10
Enter the INDUCTION:10
Enter the CAPACITANCE:10
The FREQUENCY is:0.8660254037844386
BUILD SUCCESSFUL (total time: 12 seconds)
run:
Enter the RESISTANCE:0
Enter the INDUCTION:0
Enter the CAPACITANCE:0
The FREQUENCY is:NaN
BUILD SUCCESSFUL (total time: 9 seconds)