2012-01-12 19 views
43

Aquí está mi código. Por alguna razón, mi IMC no se calculó correctamente. Cuando verifico el resultado en una calculadora para esto: (10/((10/100)^2))) obtengo 1000, pero en mi programa, obtengo 5. No estoy seguro de lo que estoy haciendo mal. Aquí está mi código:Aumentando un número a una potencia en 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

Este no es el operador que está buscando. – Malfist

+2

@Malfist Mientras leo lo que escribiste puedo verte agitando la mano frente a su cara como un jedi –

+1

@Malfist lol =) – stytown

Respuesta

80

^ en Java no significa elevar a una potencia. Significa XOR.

Se puede utilizar de java Math.pow()


Y es posible que desee considerar el uso de double en lugar de int, es decir:

double height; 
double weight; 

Tenga en cuenta que 199/100 evalúa a 1.

+3

Ya veo, sabía que tenía que ser algo muy simple que estaba haciendo mal. Gracias. –

+2

@stytown: Debería aceptar la respuesta si resolvió su problema. – unholysampler

3

^ no es el operador que quieres Está buscando la función pow de java.lang.Math.

Puede usar Math.pow(value, power).

Ejemplo:

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

Su cálculo es probablemente el culpable. Trate de usar:

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

Debido a que tanto height y 100 son números enteros, era probable encontrar la respuesta equivocada al dividir. Sin embargo, 100.0 es un doble. Sugiero que hagas weight un doble también. Además, el operador ^ no es para poderes. Use el método Math.pow() en su lugar.

+1

Gracias.Entonces ahora, en lugar de darme 1000, me da 999.9999 cuando ingreso 10 y 10 como peso y altura. Sin embargo, parece estar funcionando mucho mejor ahora. bmi = peso/Math.pow (altura/100.00,2.00); – stytown

+1

Eso depende de la precisión de sus valores 'dobles'. Siempre puede redondear como el último paso en el cálculo si es necesario. – Bernard

+0

Gracias, Bernard, lo investigaré. – 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

Publique una explicación en lugar de código puro. = D –

8

podemos utilizar

Math.pow(2, 4); 

esta media 2 a la potencia 4 (2^4)

respuesta = 16

+0

en realidad, cuando solo quieres potencias de 2, usa el cambio de bits: '1 << 4 = 16 ' – Xerus

3

Demasiado tarde para el PO, por supuesto, pero aún ... Reordenar la expresión como:

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

Elimina todo el punto flotante y convierte una división por una constante en una multiplicación, que debe ejecutarse más rápido. La precisión del número entero probablemente sea adecuada para esta aplicación, pero si no lo es, entonces:

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

aún sería una mejora.

Cuestiones relacionadas