使用来自用户输入的变量的方程式

时间:2019-10-25 05:40:44

标签: java variables input equation

我的程序是用法语编写的,但是只是为了简要说明我的问题,每次我尝试制作一个程序时都会发生这种情况,该程序使用等式从用户输入的变量中计算结果。

说用户给出自己的体重,他喝的酒量以及这种酒的强度。

此等式将确定是血液中的白痴:

血液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 .") ;
        }
    }
}

谢谢。

2 个答案:

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