【问题标题】:Why can't I initialize my double constant DOSE with scanner input?为什么我不能用扫描仪输入初始化我的双常数 DOSE?
【发布时间】:2015-09-22 19:00:48
【问题描述】:

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

我最初在扫描仪上遇到资源泄漏问题,但我在这里找到了答案。但是,既然我已经修复了扫描仪,我似乎无法将常量双变量初始化为用户输入。扫描仪本身可以工作,并且变量获得输入值,但是 java 一直拒绝它说“DOSE 无法解析为变量”。我什至放了一个 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

【问题讨论】:

  • 您在两个{ } 中定义了DOSE,这是唯一定义它的地方。

标签: java variables constants final


【解决方案1】:

您在 try block 内创建 DOSE 变量 意思是

{
     double DOSE  = input.nextDouble();
}

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

所以试试类似的东西

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 2017-06-06
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多