为什么我不能用扫描仪输入初始化我的双常量 DOSE?

Why can't I initialize my double constant DOSE with scanner input?

我是初学者 java 程序员。我正在尝试编写一个简单的程序来根据物质的半衰期计算您体内残留的物质量,以及何时根据服用药物的时间和方式达到平衡(后者不是尚未完成)。

最初我遇到了扫描仪资源泄漏问题,但我在这里找到了解决办法。但是,既然我已经修复了扫描仪,我似乎无法将常量双精度变量初始化为用户输入。扫描仪本身可以工作,并且变量获得输入值,但是 java 一直拒绝它并说 "DOSE cannot be resolved to a variable"。我什至放了一个 System.out.println(DOSE);在扫描仪输入后测试扫描仪是否正常工作,它是。但是程序不会 运行 除非我在程序中进一步初始化变量,这只会覆盖先前成功输入的 DOSE 值!

我目前对最后的 double DOSE = 5 初始化进行了评论,这是引发错误的原因。如果我去掉那些注释斜杠,那么程序运行正常,但用户输入无关紧要。

我试图在这里找到解决方案,但没有成功。

package halflife;
import java.util.Scanner;
public class HalfLifeCalculation {
    public static void main(String[] args) {

        //variables scanner designated
        Scanner input = new Scanner(System.in);
        try {
            System.out.print("Enter your daily dose: ");
            double DOSE = input.nextDouble();
            System.out.println(DOSE);
        } finally {
            input.close();

        } //try end

        //variables pre-set
        int day = 2;        
        //final double DOSE = 5;
        final double HALFLIFE = 0.175;
        double result = (DOSE*HALFLIFE);

        //pre-calculated header
        System.out.println("Day 1\nRemaining substance is " + result + " mg\n");

        //while loop calculation
        while (day < 101) {
            System.out.println("Day " + day);
            System.out.println("Remaining substance is " + (result = (result + DOSE)*HALFLIFE) + " mg\n");
            day++;

        } //while end
    } //main end
} //class end

你在 try block 中创建了 DOSE 变量 意思是

{
     double DOSE  = input.nextDouble();
}

你看到了吗,DOSE 包裹在括号中,这就是所谓的变量作用域。所以在范围之外没有人知道那个剂量..

所以试试

double DOSE = 0;
try{
   DOSE = input.nextDouble();
}