【问题标题】:I having trouble assigning strings in an if else statement我在 if else 语句中分配字符串时遇到问题
【发布时间】:2011-07-03 04:30:41
【问题描述】:

现在我有一个编程任务来计算 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);

【问题讨论】:

  • 您是否在某处定义了classificationString classification;
  • 这应该可以工作,尽管字符串文字周围的括号是多余的。此外,您可能会发现 [24.9, 25) 范围内的 BMI 存在问题,因为它们不在您的范围内,并且默认为“肥胖”(例如,请注意如果 bmi = 24.95 会发生什么)。除此之外,@Felix 所说的。
  • 您需要向我们展示您如何声明分类。也不需要围绕字符串文字的封闭 ()。对话消息中还有拼写错误。
  • 是的,我有分类;在我的循环上方和我的其他变量我也修复了范围问题(老师的讲义不是我):)
  • @Brad:我将在下面重复我的评论:什么循环?你没有在你的代码中显示一个。请编辑您的代码以向我们展示全部

标签: java string conditional


【解决方案1】:

要分配一个变量字符串值,请执行以下操作:

classification = new String("whatever");

【讨论】:

  • 不,在这里使用new String(String) 构造函数没有意义。
  • @Asterisk: 是的,分类 is 是一个变量名……但是为什么你要调用字符串构造函数而不是仅仅使用文字呢?您认为已经给出的代码中的分配有什么问题?
  • @Jon 我从未见过使用 () 进行赋值。现在我知道了:)
  • @Jon 说了什么。它在技术上是正确的,但完全是多余的。
  • 您基本上是在使用“blah”语法创建一个 String 对象,并将其传递给 String 的复制构造函数。好的。一石两物。
【解决方案2】:

假设你已经在某处声明了变量,它应该可以正常工作。 (那是在编译和运行时不会崩溃;正如 cmets 中指出的,实际的 BMI 比较有问题,字符串文字周围的括号是多余的。)

例如:

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

请展示一个类似的简短但完整的程序来演示该问题。

【讨论】:

  • @Brad:哪个循环?你没有在你的代码中显示一个。向我们展示所有代码有助于我们弄清楚这些事情 - 看起来问题出在您的代码中,而不是您到目前为止发布的内容。
【解决方案3】:

这并不是您问题的真正答案,但您的 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 语句上方声明的,它真的不应该给你那个错误。

【讨论】:

  • 对不起,我有一些 >= 和
  • @Brad:我认为你错过了重点。查看您的原始代码并计算出 BMI 为 24.95 会发生什么。
  • @Jon Skeet 啊,对不起,我真的很陌生,这是我的第一堂编程课,如果你没有注意到我有点挣扎。 :)
【解决方案4】:

如果你把最后一行改为

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

你为什么使用 showInternalMessageDialog 而不是之前使用的 showMessageDialog。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多