2012-01-12 21 views
43

Ecco il mio codice. Per qualche ragione il mio BMI non è calcolato correttamente. Quando controllo l'output su una calcolatrice per questo: (10/((10/100)^2))) Ottengo 1000, ma nel mio programma ottengo 5. Non sono sicuro di cosa sto facendo male. Qui è il mio codice:Aumentare un numero a una potenza in Java

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); 
    } 
} 
+14

Questo non è l'operatore che stai cercando. – Malfist

+2

@Malfist Mentre leggo quello che hai scritto posso vederti agitare la mano davanti alla sua faccia come un jedi –

+1

@Malfist lol =) – stytown

risposta

80

^ in Java non significa elevare a una potenza. Significa XOR.

È possibile utilizzare Java Math.pow()


E si potrebbe voler considerare l'utilizzo double invece di int -cioè:

double height; 
double weight; 

Nota che 199/100 viene valutata a 1.

+3

Vedo, sapevo che doveva essere qualcosa di molto semplice che stavo sbagliando. Grazie. –

+2

@stytown: dovresti accettare la risposta se risolvesse il tuo problema. – unholysampler

3

^ non è l'operatore che desideri. Stai cercando la funzione pow di java.lang.Math.

È possibile utilizzare Math.pow(value, power).

Esempio:

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

il calcolo è probabile il colpevole. Provare a utilizzare:

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

Poiché sia ​​height e 100 sono interi, si rischiava sempre la risposta sbagliata quando si divide. Tuttavia, 100.0 è un doppio. Ti suggerisco di fare anche il doppio weight. Inoltre, l'operatore ^ non è per i poteri. Utilizzare invece il metodo Math.pow().

+1

Grazie.Così ora invece di darmi 1000, mi dà 999.9999 quando inserisco 10 e 10 come peso e altezza. Sembra che ora stia funzionando molto meglio. bmi = peso/Math.pow (altezza/100,00,2,00); – stytown

+1

Dipende dalla precisione dei valori 'double'. È sempre possibile arrotondare come passaggio finale del calcolo, se necessario. – Bernard

+0

Grazie Bernard, ci penserò. – stytown

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); 
+1

Posta una spiegazione invece del puro codice. = D –

8

possiamo usare

Math.pow(2, 4); 

questa media 2 alla potenza 4 (2^4)

risposta = 16

+0

, in realtà, quando vuoi solo le potenze di 2, usa bitshifting: '1 << 4 = 16' – Xerus

3

troppo tardi per OP naturalmente, ma ancora ... Riorganizzare l'espressione nel modo seguente:

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

Elimina tutto il punto mobile e converte una divisione di una costante in una moltiplicazione, che dovrebbe essere eseguita più rapidamente. precisione Integer è probabilmente adeguata per questa applicazione, ma se non lo è, allora:

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

sarebbe ancora un miglioramento.

Problemi correlati