Уравнение с использованием переменных из пользовательского ввода - PullRequest
0 голосов
/ 25 октября 2019

Моя программа написана на французском языке, но просто для краткого объяснения моей проблемы, это то, что происходит каждый раз, когда я пытаюсь создать программу, которая вычисляет результаты по переменным, поступающим от пользовательского ввода, используя уравнение.

Говорит, что пользователь указывает свой вес, количество спирта, которое он выпил, и крепость этого спирта.

Это уравнение определяет, является ли спирт крови:

спирт крови = (количество * сила) / (вес * 0,4)

4 переменные находятся перед программой, объявлены и инициализированы, чтобы иметь возможность дать переменной (спирт крови) значение самого уравнения.

Но результат всегда дает 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 голосов
/ 25 октября 2019

NaN означает «Не число». Это происходит, когда арифметическая операция не определена. например, 0,0 / 0,0 или квадратный корень из отрицательного числа. В вашем случае вы принимаете все значения 0, что приводит к вычислению (0.0 * 0.0) / (0.0 / 0.4) = (0.0 / 0.0), которое не определено из-за значений с плавающей запятой. Если вы используете 0/0 для целых чисел, это даст арифметическое исключение. Старайтесь не использовать c = 0.

0 голосов
/ 25 октября 2019
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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...