Java 为什么这段代码总是返回一个";变量可能尚未初始化";错误?

Java 为什么这段代码总是返回一个";变量可能尚未初始化";错误?,java,Java,我对java编码还不熟悉,所以如果我有点不了解,请原谅,但我的代码总是为我返回这个错误: Main.java:15: error: variable hold might not have been initialized return hold; ^ 我的代码如下: public class Main { public static double calcPostage(double ounces) { doub

我对java编码还不熟悉,所以如果我有点不了解,请原谅,但我的代码总是为我返回这个错误:

Main.java:15: error: variable hold might not have been initialized
        return hold;
               ^

我的代码如下:

public class Main 
{
    public static double calcPostage(double ounces)
    {
        double hold;
        if ((ounces <= 10) && (ounces > 0))
            hold = 3;
        else if (ounces > 10)
            hold = ((ounces-10)*0.15)+3;
        else
            System.out.print("Invalid input.");
        return hold;
    }

    public static void main(String[] args) 
    {
        double hold;
        DecimalFormat form = new DecimalFormat("0.000");
        Scanner input = new Scanner(System.in);
        System.out.print("Enter how heavy your package is in ounces.\n");
        double ounces = input.nextDouble();
        System.out.print("It will cost " + form.format(calcPostage(ounces)) + " to mail your package.");
    }
}
公共类主
{
公共静态双容量(双盎司)
{
双重持有;
如果((盎司0))
保持=3;
否则,如果(盎司>10)
持有=((盎司-10)*0.15)+3;
其他的
系统输出打印(“无效输入”);
返回保持;
}
公共静态void main(字符串[]args)
{
双重持有;
十进制格式=新的十进制格式(“0.000”);
扫描仪输入=新扫描仪(System.in);
System.out.print(“以盎司为单位输入包裹的重量。\n”);
双盎司=input.nextDouble();
System.out.print(“邮寄包裹将花费”+form.format(calcPostage(盎司))+”;
}
}

这段代码中可能还有其他一些问题,因为我还不能成功地运行它,但如果有人能帮我解决这个问题,我将不胜感激。谢谢

条件if和else如果两个条件都不满足,else打印无效输入,但在这种情况下保持未初始化。 试着把 双保持=0.0; 这样就可以初始化hold。

在下面的代码中:

public static double calcPostage(double ounces)
{
    double hold;
    if ((ounces <= 10) && (ounces > 0))
        hold = 3;
    else if (ounces > 10)
        hold = ((ounces-10)*0.15)+3;
    else
        System.out.print("Invalid input.");
    return hold;
}
因此,最好初始化变量,为其指定默认值或初始值

这样做:

double hold = 0.0;

使用默认值
double hold=0.0初始化它else
块没有。或者,如果
盎司,你的IDE肯定已经在它的左边用一个小小的红十字标记警告过你,如果你点击它,你的IDE可以自动设置一个默认值。
double hold = 0.0;