2
respostas

[Projeto] Usando o do while para calcular o IDC corporal

import java.util.Scanner;

public class IDCWithLoop { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String continueCalc;

    do {
        System.out.print("Peso (kg): ");
        double weight = sc.nextDouble();

        System.out.print("Altura (m): ");
        double height = sc.nextDouble();

        double idc = peso / (altura * altura);
        System.out.printf("Seu IDC é: %.2f%n", idc);

        System.out.print("Calcular novamente? (sim/não): ");
        continueCalc = sc.next();

    } while (continueCalc.equalsIgnoreCase("yes"));

    sc.close();
    System.out.println("Fim!");
}

}

2 respostas

Oi, Jonas! Como vai?

Seu uso do *do while* para repetir o cálculo do IDC ficou claro, e é ótimo ver essa aplicação prática dos laços de repetição. Um detalhe que chama atenção é a variável idc estar sendo calculada com variáveis que não existem no código: peso e altura. No seu caso, o correto seria usar weight e height, que são as que você declarou.

Uma dica interessante para o futuro é usar o método *equalsIgnoreCase* com a palavra "sim", já que o código está em português. Veja este exemplo:


} while (continueCalc.equalsIgnoreCase("sim"));

Assim, o programa entende "Sim", "sim", "SIM" e outras variações. Isso melhora a experiência de quem usa o programa.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Reescrevi o seu programa utilizando uma API que estou desenvolvendo e aproveitei para corrigir seu código e este foi o resultado:

package com.github.rickmvi.challenge03;

import com.github.rickmvi.jtoolbox.console.Out;
import com.github.rickmvi.jtoolbox.console.utils.ScannerUtils;
import com.github.rickmvi.jtoolbox.control.DoWhile;
import com.github.rickmvi.jtoolbox.control.internal.MathUtils;

import java.util.concurrent.atomic.AtomicReference;

public class IDCWithLoop {
    public static void main(String[] args) {
        ScannerUtils.init();

        AtomicReference<String> continueCalc = new AtomicReference<>("sim");

        DoWhile.doWhile(
                () -> continueCalc.get().equalsIgnoreCase("sim"),
                () -> {
                    Out.print("Peso (kg): ");
                    double weight = ScannerUtils.nextDouble();
                    Out.print("Altura (m): ");
                    double height = ScannerUtils.nextDouble();

                    double idc = MathUtils.divideDouble(weight, MathUtils.pow(height, 2));
                    Out.printFormatted("Seu IDC é: %dc{0}%n", idc);

                    Out.print("Calcular novamente? (sim/não): ");
                    continueCalc.set(ScannerUtils.next());
                });

        ScannerUtils.close();
        Out.printLine("Fim!");
    }
}

e assim ficou a saida:
Insira aqui a descrição dessa imagem para ajudar na acessibilidade

A API que estou desenvolvendo possui um sistema próprio para conversão de números e formatação, utilizando também placeholders. Usei %dc{0} para indicar que o número deve ser formatado no estilo decimal comma, e o {0} especifica qual argumento (pelo índice no array/varargs de Object) será formatado.