Problem with methods

0

I'm doing a program that calculates BMI, using methods without return. Program in question:

package pct;
import java.util.Scanner;
public class Ex02Metodos {
    public static void main(String[] args) {
        Scanner teclado = new Scanner(System.in);
        String sexo;
        double altura, peso, valorIMC = 0;


        System.out.println("Digite sua altura:");
        altura = teclado.nextDouble();
        System.out.println("Digite seu peso");
        peso = teclado.nextDouble();
        teclado.nextLine();
        System.out.println("\n\nDigite seu sexo:");
        sexo = teclado.nextLine();

        calcularimc(altura,peso,valorIMC,sexo);


    }
    public static void calcularimc(double altura, double peso, double valorIMC, String sexo){
        valorIMC = peso / (altura * altura);

        if(sexo == "mulher"){
            if(valorIMC < 19.1){
                System.out.println("Abaixo do peso");
            }
            else if(valorIMC == 19.1 & valorIMC <= 25.8 ){
                System.out.println("Peso normal");
            }
            else if(valorIMC == 25.8 & valorIMC <= 27.3){
                System.out.println("Marginalmente acima do peso");
            }
            else if(valorIMC == 27.3 & valorIMC <= 31.1){
                System.out.println("Acima do peso ideal");
            }
            else if(valorIMC > 31.1){
                System.out.println("Obeso");
            }
        }
        else if(sexo =="homem"){
            if(valorIMC < 20.7){
                System.out.println("Abaixo do peso");
            }
            else if(valorIMC == 20.7 & valorIMC <=26.4){
                System.out.println("Peso normal");
            }
            else if(valorIMC == 26.4 & valorIMC <= 27.8){
                System.out.println("Marginalmente acima do peso");
            }
            else if(valorIMC == 27.8 & valorIMC <= 32.3){
                System.out.println("Acima do peso ideal");
            }
            else if(valorIMC > 32.3){
                System.out.println("Obeso");
            }
        }
        }

    }

At runtime, the method is not running, it terminates.

    
asked by anonymous 01.05.2017 / 23:26

1 answer

5

Perhaps the reason is to use the == operator to compare strings. They are objects, and should be compared to equals . Comparing with the == operator you are comparing the object reference (memory address) and not its content itself, as is done using equals of class String , and even though the strings have the same content, they take up different memory spaces ( exceptions ).

There are other logic issues too, instead of using >= you were using == in the logic of some ifs. With the change below, it works again under all conditions:

public static void calcularimc(double altura, double peso, double valorIMC, String sexo) {
    valorIMC = peso / (altura * altura);

    if (sexo.equals("mulher")) {
        if (valorIMC < 19.1) {
            System.out.println("Abaixo do peso");
        } else if (valorIMC >= 19.1 & valorIMC <= 25.8) {
            System.out.println("Peso normal");
        } else if (valorIMC >= 25.8 & valorIMC <= 27.3) {
            System.out.println("Marginalmente acima do peso");
        } else if (valorIMC >= 27.3 & valorIMC <= 31.1) {
            System.out.println("Acima do peso ideal");
        } else if (valorIMC > 31.1) {
            System.out.println("Obeso");
        }
    } else if (sexo.equals("homem")) {
        if (valorIMC < 20.7) {
            System.out.println("Abaixo do peso");
        } else if (valorIMC >= 20.7 & valorIMC <= 26.4) {
            System.out.println("Peso normal");
        } else if (valorIMC >= 26.4 & valorIMC <= 27.8) {
            System.out.println("Marginalmente acima do peso");
        } else if (valorIMC >= 27.8 & valorIMC <= 32.3) {
            System.out.println("Acima do peso ideal");
        } else if (valorIMC > 32.3) {
            System.out.println("Obeso");
        }
    }
}
    
02.05.2017 / 01:26