我的程序是用法语编写的,但是只是为了简要说明我的问题,每次我尝试制作一个程序时都会发生这种情况,该程序使用等式从用户输入的变量中计算结果。
说用户给出自己的体重,他喝的酒量以及这种酒的强度。
此等式将确定是血液中的白痴:
血液alcool =(攻击力*力量)/(体重* 0.4)
这4个变量在程序之前进行声明和初始化,以便使变量(血液alcool)具有等式本身的值。
但是结果始终为NaN,就好像程序不使用用户输入的变量,而是所有变量的初始值都是0。
我通常通过不初始化变量来解决该问题,并将方程放在需要的地方,将结果放在程序内,在包含所有用户输入的循环内,例如:
int v1;
int v2;
int v3;
while (..) {
v1=read.input
v2=read.input
v3= v1/v2
}
我想知道是否有另一种方法可以使编译器将用户输入用于方程式,即使变量已在主程序的开头进行了初始化。
如果可以发出请求,这是我的代码,在编译时,对于变量alcoolemie,我得到 NaN 。
public class Alcoolemie {
public static void main ( String [] args) {
// Constantes
final String MSG_SOL_QTE_BOISSON = "Entrez la quantité de boisson"
+ " consommée(onces) :";
final String MSG_ERR_QTE_BOISSON = "Erreur, la quantité doit être entre"
+ " 1.0 et 80.0 onces." ;
final String MSG_SOL_TAUX_ALCOOL = "Entrez le taux d'alcool de la "
+ "boisson consommée(%): " ;
final String MSG_ERR_TAUX_ALCOOL = "Erreur, le taux doit être entre"
+ " 0.5 % et 100.0 %." ;
final String MSG_SOL_POIDS = "Entrez le poids de la personne(kilos) :" ;
final String MSG_ERR_POIDS = "Erreur, le poids doit être entre 25.0 et 200.0"
+ " kilos." ;
// declaration de variables
double onces= 0 ; // quantité d'alcool consommée par la personne
double tauxAlcool= 0; // taux d'alcool de la boisson
double poids= 0 ; // poids en kilo de la personne
double alcoolemie = (double)((onces*tauxAlcool)/(poids*0.4)); // taux d'alcoolemie de la personne
// sollicitation de la quantite d'alcool consommee
System.out.println(MSG_SOL_QTE_BOISSON);
onces = Clavier.lireDouble();
while (onces <1.0 || onces > 80.0 ) {
System.out.println(MSG_ERR_QTE_BOISSON);
System.out.println(MSG_SOL_QTE_BOISSON);
onces = Clavier.lireDouble();
}
// sollicitation du taux d'alcool de la boisson consommee
System.out.println(MSG_SOL_TAUX_ALCOOL);
tauxAlcool = Clavier.lireDouble();
while (tauxAlcool <0.5 || tauxAlcool > 100.0 ) {
System.out.println(MSG_ERR_TAUX_ALCOOL);
System.out.println(MSG_SOL_TAUX_ALCOOL);
tauxAlcool = Clavier.lireDouble();
}
// sollicitation du poids de la boisson consommee
System.out.println(MSG_SOL_POIDS);
poids = Clavier.lireDouble();
while (poids <25.0 || poids > 200.0 ) {
System.out.println(MSG_ERR_POIDS);
System.out.println(MSG_SOL_POIDS);
poids = Clavier.lireDouble();
}
// Affichage du taux d'alcoolemie
System.out.println("Votre taux d'alcool dans le sang est de" + alcoolemie
+ "\n");
if (alcoolemie >= 0.08) { // Message taux d'alcoolemie dangeureux
System.out.println("Attention! Votre taux d'alcool dans le sang dépasse"
+ "la limite sécuritaire de 0.08 .") ;
}
}
}
谢谢。
答案 0 :(得分:1)
NaN代表“非数字”。未定义算术运算时会出现。例如0.0 / 0.0或负数的平方根。 在您的情况下,您将所有值都设为0,这将导致计算(0.0 * 0.0)/(0.0 / 0.4)=(0.0 / 0.0),由于浮点值而未定义。 如果将0/0用作整数,它将给出算术异常。 尽量不要使用c = 0。
答案 1 :(得分:0)
double alcoolemie = (double)((onces*tauxAlcool)/(poids*0.4));
必须在
之后完成System.out.println(MSG_SOL_POIDS);
poids = Clavier.lireDouble();
while (poids <25.0 || poids > 200.0 ) {
System.out.println(MSG_ERR_POIDS);
System.out.println(MSG_SOL_POIDS);
poids = Clavier.lireDouble();
}