Eine Zahl in Java zu einer Macht machen

75

Hier ist mein Code. Aus irgendeinem Grund wird mein BMI nicht richtig berechnet. Wenn ich die Ausgabe auf einem Taschenrechner auf Folgendes überprüfe: (10/((10/100)^2)))Ich bekomme 1000, aber in meinem Programm bekomme ich 5. Ich bin nicht sicher, was ich falsch mache. Hier ist mein 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);
    }
}
Stytown
quelle
22
Dies ist nicht der Operator, den Sie suchen.
Malfist
6
@ Malfist Während ich lese, was Sie geschrieben haben, kann ich sehen, wie Sie Ihre Hand vor seinem Gesicht wie ein Jedi winken
John Vint

Antworten:

137

^in Java bedeutet nicht, sich zu einer Macht zu erheben. Es bedeutet XOR.

Sie können Java verwenden Math.pow()


Und vielleicht möchten Sie in Betracht ziehen, doublestatt int- das ist:

double height;
double weight;

Beachten Sie, dass 199/1001 ergibt.

WuHoUnited
quelle
3
Ich verstehe, ich wusste, dass es etwas sehr Einfaches sein musste, das ich falsch machte. Vielen Dank.
2
@stytown: Sie sollten die Antwort akzeptieren, wenn sie Ihr Problem gelöst hat.
Unholysampler
In diesem Fall ist es wahrscheinlich in Ordnung, da die Genauigkeit für den ernsthaft fehlerhaften BMI-Algorithmus, der leider immer noch verwendet wird, keine Rolle spielt. Wenn Sie eine Dezimalgenauigkeit benötigen, ist es besser, BigDecimal zu verwenden, da es keine inhärenten Binär-Dezimal-Konvertierungsfehler von binären Gleitkommazahlen aufweist, da es eher eine Dezimal- als eine Binärskalierung verwendet.
Infernoz
31

wir können benutzen

Math.pow(2, 4);

dies bedeutet 2 hoch 4 (2 ^ 4)

Antwort = 16

AGTHAMAYS
quelle
3
Wenn Sie nur Zweierpotenzen wünschen, verwenden Sie Bitshifting:1<<4 = 16
Xerus
Ich würde Bit-Shifting nur verwenden, wenn die Leistung kritisch ist. Andernfalls wird der Code nur schwerer lesbar.
Paul Wintz
8

Ihre Berechnung ist wahrscheinlich der Schuldige. Versuchen Sie es mit:

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

Da beide heightund 100ganze Zahlen sind, haben Sie beim Teilen wahrscheinlich die falsche Antwort erhalten. Ist 100.0jedoch ein Doppel. Ich schlage vor, Sie machen auch weightein Doppel. Auch ist der ^Bediener nicht für Befugnisse. Verwenden Sie Math.pow()stattdessen die Methode.

Bernard
quelle
1
Vielen Dank. Anstatt mir jetzt 1000 zu geben, gibt es mir 999,9999, wenn ich 10 und 10 als Gewicht und Größe eingebe. Es scheint jetzt allerdings viel besser zu funktionieren. bmi = Gewicht / Math.pow (Höhe / 100.00,2.00);
Stytown
1
Das hängt von der Genauigkeit Ihrer doubleWerte ab. Sie können bei Bedarf jederzeit als letzten Schritt in der Berechnung runden.
Bernard
Danke Bernard, ich werde das untersuchen.
Stytown
5

^ist nicht der gewünschte Operator. Sie suchen die powFunktion von java.lang.Math.

Sie können verwenden Math.pow(value, power).

Beispiel:

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

Natürlich zu spät für das OP, aber immer noch ... Neuanordnung des Ausdrucks als:

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

Eliminiert den gesamten Gleitkommawert und wandelt eine Division durch eine Konstante in eine Multiplikation um, die schneller ausgeführt werden sollte. Die Ganzzahlgenauigkeit ist für diese Anwendung wahrscheinlich ausreichend, aber wenn dies nicht der Fall ist, dann:

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

wäre immer noch eine Verbesserung.

Chris Barry
quelle
2
int weight=10;
int height=10;
double bmi;
bmi = weight / Math.pow(height / 100.0, 2.0);
System.out.println("bmi"+(bmi));
double result = bmi * 100;
result = Math.round(result);
result = result / 100;
System.out.println("result"+result);
preeti
quelle
2

Sie sollten die folgende Methode verwenden:

Math.pow (doppelt a, doppelt b)

Gibt den Wert des ersten Arguments zurück, der zur Potenz des zweiten Arguments erhoben wird.

PulkitRajput
quelle
0

1) Wir verwenden normalerweise keine int -Datentypen für Größe, Gewicht, Entfernung, Temperatur usw. (Variablen, die Dezimalstellen haben können). Daher sollten Größe, Gewicht doppelt oder schwebend sein. aber double ist genauer als float wenn Sie mehr Dezimalstellen haben

2) Und anstelle von ^ können Sie diese Berechnung wie folgt ändern: Math.pow()

bmi = (weight/(Math.pow(height/100, 2)));

3) Math.pow()Methode hat unten Definition

Math.pow(double var_1, double var_2);

Beispiel:

ich) Math.pow(8, 2) wird 64 (8 hoch 2) erzeugt

ii) Math.pow(8.2, 2.1)wird produziert 82.986813689753 (8,2 hoch 2,1)

Kavindu-Tharaka
quelle