У меня проблемы с назначением строк в операторе if else - PullRequest
0 голосов
/ 24 февраля 2011

Прямо сейчас у меня есть программирующее задание, чтобы вычислить bmi (индекс массы тела) и назначить его для классификации.В зависимости от bmi он назначается следующим образом.У меня проблемы с классификацией получения строк.Когда я пытаюсь поместить классификацию в окно сообщения, оно говорит мне, что оно не инициализировано.

            public static void main(String[] args) {
    //Variables
    double bmi;         // Body Mass Index
    String weight;      // Weight in kilograms
    String height;      // height in meters
    String classification;

    weight = JOptionPane.showInputDialog("Welcome to the BMI and BSA Calculator to begin enter weight in kilograms.");
    double weight2 = Double.parseDouble(weight);
    height = JOptionPane.showInputDialog("Enter height in meters");
    double height2 = Double.parseDouble(height);

    bmi = weight2/(height2*height2);

    JOptionPane.showMessageDialog(null, "Your BMI is: " + bmi);

    if (bmi < 18.5)
    {
        classification = "Underweight";
    }
    else if (bmi < 25)
    {
        classification = "Normal";
    }
    else if (bmi < 30)
    {
        classification = "Overweight";
    }
    else
    {
        classification = "Obese";
    }


    JOptionPane.showInternalMessageDialog(null, "Your classification is: " + classification);

Ответы [ 4 ]

2 голосов
/ 24 февраля 2011

Это не совсем ответ на ваш вопрос, но вы пропускаете некоторые значения в своих утверждениях if.Например, что если бы bmi было 24,95, это не привело бы к блокам Normal или Overweight.

В общем, я пытаюсь выбрать один тип сравнения и просто использовать его.

if (bmi < 18.5)
{
    classification = "Underweight";
}
else if (bmi < 25)
{
    classification = "Normal";
}
else if (bmi < 30)
{
    classification = "Overweight";
}
else
{
    classification = "Obese";
}

Что касается ошибки, которую вы получаете, предполагая, что классификация объявлена ​​чуть выше оператора if, это действительно не должно давать вам эту ошибку.

1 голос
/ 24 февраля 2011

Что произойдет, если вы измените последнюю строку на

String result = "Your result is: " + classification;        
JOptionPane.showInternalMessageDialog(null, result);

И почему вы используете showInternalMessageDialog вместо showMessageDialog, как ранее использовалось.

0 голосов
/ 24 февраля 2011

Должно работать нормально, если вы где-то объявили переменную.(Это с точки зрения компиляции и запуска без сбоев; как отмечено в комментариях, у фактических сравнений ИМТ есть проблемы, и скобки вокруг строковых литералов являются избыточными.)

Например:

public class Test
{
    public static void main(String[] args) 
    {
        double bmi = Double.parseDouble(args[0]);

        String classification;

        if (bmi < 18.5)
        {
            classification = ("Underweight");
        }
        else if (bmi >= 18.5  && bmi < 24.9)
        {
            classification = ("Normal");
        }
        else if (bmi >= 25 && bmi < 29.9)
        {
            classification = ("Overweight");
        }
        else
        {
            classification = ("Obese");
        }

        System.out.println("Classification: " + classification);
    }
}

Пожалуйста, покажите похожую короткую, но полную программу, которая демонстрирует проблему.

0 голосов
/ 24 февраля 2011

Чтобы присвоить строковое значение переменной, выполните следующие действия:

classification = new String("whatever");
...