100 votes

Augmentation d'un nombre à une puissance en Java

Voici mon code. Pour une raison quelconque, mon IMC n'est pas calculé correctement. Lorsque je vérifie la sortie sur une calculatrice pour ce : (10/((10/100)^2))) J'obtiens 1000, mais dans mon programme, j'obtiens 5. Je ne suis pas sûr de ce que je fais mal. Voici mon code :

import javax.swing.*;

public class BMI {
    public static void main(String args[]) {
        int height;
        int weight;
        String getweight;
        getweight = JOptionPane.showInputDialog(null, "Please enter your weight in Kilograms");
        String getheight;
        getheight = JOptionPane.showInputDialog(null, "Please enter your height in Centimeters");
        weight = Integer.parseInt(getweight);
        height = Integer.parseInt(getheight);
        double bmi;
        bmi = (weight/((height/100)^2));
        JOptionPane.showMessageDialog(null, "Your BMI is: " + bmi);
    }
}

164voto

WuHoUnited Points 2601

^ en java ne signifie pas élever à une puissance. Il signifie XOR.

Vous pouvez utiliser l'outil de java Math.pow()


Et vous pourriez envisager d'utiliser double au lieu de int c'est-à-dire :

double height;
double weight;

Notez que 199/100 est égal à 1.

45voto

A.G.THAMAYS Points 1997

Nous pouvons utiliser

Math.pow(2, 4);

cela signifie 2 à la puissance 4 (2^4)

réponse = 16

12voto

lhk Points 1429

^ n'est pas l'opérateur que vous recherchez. Vous recherchez l'opérateur pow fonction de java.lang.Math .

Vous pouvez utiliser Math.pow(value, power) .

Exemple :

Math.pow(23, 5); // 23 to the fifth power

9voto

Bernard Points 5492

Votre calcul est probablement le coupable. Essayez d'utiliser :

bmi = weight / Math.pow(height / 100.0, 2.0);

Parce que les deux height y 100 sont des nombres entiers, vous avez probablement obtenu une mauvaise réponse en divisant. Cependant, 100.0 est un double. Je vous suggère de faire weight un double également. De plus, le ^ n'est pas pour les pouvoirs. Utilisez l'opérateur Math.pow() à la place.

4voto

Chris Barry Points 57

Trop tard pour l'OP bien sûr, mais quand même... En réorganisant l'expression comme suit :

int bmi = (10000 * weight) / (height * height)

Élimine toute la virgule flottante, et convertit une division par une constante en une multiplication, ce qui devrait s'exécuter plus rapidement. La précision des nombres entiers est probablement adéquate pour cette application, mais si ce n'est pas le cas, alors.. :

double bmi = (10000.0 * weight) / (height * height)

serait quand même une amélioration.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X