匿名结果: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)