Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 存储要在整个if语句中使用的double_Java_Loops - Fatal编程技术网

Java 存储要在整个if语句中使用的double

Java 存储要在整个if语句中使用的double,java,loops,Java,Loops,我是一个初学者程序员,已经玩了几天了。。。我似乎找不到存储双精度的方法,通过一系列if语句运行它,然后在System.out.println(“…”中显示该双精度 我尝试过使用阵列、交换机等。根据用户输入,我需要修改基本速率并让它存储以前的修改,我还需要运行更多的基本速率 我想到的最接近的方法是通过几个if语句存储基准速率,但最终结果仍然是原始数字(4000.00)。我真的不太懂这门语言,当你对这门语言及其可能性不太了解时,编程是很困难的。提前感谢您的帮助 import java.util.Sc

我是一个初学者程序员,已经玩了几天了。。。我似乎找不到存储双精度的方法,通过一系列if语句运行它,然后在
System.out.println(“…”
中显示该双精度

我尝试过使用阵列、交换机等。根据用户输入,我需要修改基本速率并让它存储以前的修改,我还需要运行更多的基本速率

我想到的最接近的方法是通过几个if语句存储基准速率,但最终结果仍然是原始数字(4000.00)。我真的不太懂这门语言,当你对这门语言及其可能性不太了解时,编程是很困难的。提前感谢您的帮助

import java.util.Scanner;
public class example 
{
public static double BaseRate = 4000.00; //really not familiar with this
public static void main(String[] args) 
{
    Scanner keyboardInput = new Scanner( System.in);
    double BaseRate2 = BaseRate; //probably not necessary
//Name
            System.out.println("\rPlease enter your name:");
            String UserName = keyboardInput.nextLine();
//Gender
            System.out.println("Are you male or female? Answer m or f:");
            String input;
            char UserSex;
            input = keyboardInput.nextLine();
            //If the applicant is female, apply a 5 % discount to the base rate.
            UserSex = input.charAt(0);
            if (UserSex == 'f')
                {
                    System.out.println("Discount 5%");
                    double BaseRate = BaseRate2 * 0.95;
                    System.out.println(BaseRate);
                }
            else 
                {
                    System.out.println("Rate is now " + BaseRate);
                }
//Experience Driving
            System.out.println("How many years have you been driving?");
            int UserExperience = keyboardInput.nextInt();
            //------------------------------------------------------------------
            //If driving more than one year and less than 5, 
            //then apply a 5% discount for each year of driving.
            //----------------------------------------------------------------
            if ( UserExperience == 0 )
            {
                System.out.println("No Discount");
            }
            else if ( UserExperience < 5 )
                {
                    System.out.println("Discount 5% per year");
                    double BaseRate = BaseRate2 -  ((UserExperience * 0.05)* BaseRate2);
                    System.out.println(BaseRate);
                }
//Quote
                System.out.println(UserName + " , your rate is a follows:");
                System.out.println(BaseRate); //here is the issue

}

}
import java.util.Scanner;
公开课范例
{
public static double BaseRate=4000.00;//确实不熟悉这个
公共静态void main(字符串[]args)
{
扫描仪键盘输入=新扫描仪(System.in);
double BaseRate2=BaseRate;//可能不需要
//名字
System.out.println(“\r请输入您的姓名:”);
字符串UserName=keyboardInput.nextLine();
//性别
“你是男性还是女性?回答m或f:”;
字符串输入;
性别;
输入=键盘输入。nextLine();
//如果申请人是女性,则在基本利率基础上打5%的折扣。
UserSex=input.charAt(0);
如果(UserSex='f')
{
系统输出打印项次(“折扣5%”);
双基准利率=基准利率2*0.95;
系统输出打印项次(基准利率);
}
其他的
{
System.out.println(“速率现在为”+基准速率);
}
//体验驾驶
System.out.println(“你开车多少年了?”);
int UserExperience=keyboardInput.nextInt();
//------------------------------------------------------------------
//如果驾驶时间超过一年且少于5年,
//然后对每年的驾驶申请5%的折扣。
//----------------------------------------------------------------
if(UserExperience==0)
{
系统输出打印项次(“无折扣”);
}
else if(用户体验<5)
{
系统输出打印项次(“每年5%的折扣”);
双基准利率=基准利率2-((用户体验*0.05)*基准利率2);
系统输出打印项次(基准利率);
}
//引述
System.out.println(用户名+),您的费率如下:“);
System.out.println(BaseRate);//问题是
}
}
问题是最后的//报价基准利率未修改,保持在4000.0
我真的不想为每种可能性都输入一个新的变量名(因为不仅仅有“m或f”以及“体验驾驶”。我需要一种方法,根据用户输入在整个if语句中改变变量,以保持该数字不变(不要像这个一样返回)。这些东西应该很简单…我真的很沮丧!

您需要删除
BaseRate
的本地声明才能在类级别设置变量:

double BaseRate = BaseRate2 * 0.95;
改为:

BaseRate = BaseRate2 * 0.95;
同样地:

BaseRate = BaseRate2 - ((UserExperience * 0.05) * BaseRate2);

您正在多个位置、不同范围内定义变量
BaseRate
。例如:

double baserate = 4000.00D;

{ // inner scope
     double baserate = 1.0D
     System.out.println(baserate);
}

System.out.println(baserate);
将打印出1.0,然后打印出4000.0,因为在块
{}
内,您临时重新定义了
baserate
。这个
baserate
的“本地”声明完全独立于外部声明。当您退出内部范围时,内部声明被“遗忘”,您将再次看到外部声明


以这种方式“隐藏”现有变量可能会变得非常混乱,最好避免这种情况。

您每次都在创建一个新变量。只需使用

BaseRate = blah blah
而不是

double BaseRate = blah blah
我想到的最接近的方法是通过几个if语句来存储基本速率

问题在于,在那些
if
语句中,您将
BaseRate
重新定义为局部变量:

if (UserSex == 'f')
{
    System.out.println("Discount 5%");
    double BaseRate = BaseRate2 * 0.95;
    System.out.println(BaseRate);
}
if (UserSex == 'f')
{
    System.out.println("Discount 5%");
    BaseRate = BaseRate2 * 0.95;
    System.out.println(BaseRate);
}
这根本不会改变静态变量的值……当变量在块的末尾超出范围时,局部变量的值实际上是无用的

只需更改这样的代码即可为现有变量指定新值:

if (UserSex == 'f')
{
    System.out.println("Discount 5%");
    double BaseRate = BaseRate2 * 0.95;
    System.out.println(BaseRate);
}
if (UserSex == 'f')
{
    System.out.println("Discount 5%");
    BaseRate = BaseRate2 * 0.95;
    System.out.println(BaseRate);
}
或者,完全删除静态变量,并在所有
if
块之前在方法中声明一个局部变量-现在还不清楚为什么需要静态变量


此外,我建议您使用更传统的支撑样式,并使用camelCase作为变量名。

这让我非常恼火,因为它太简单了……非常感谢!是的,我应该使用camelCase,谢谢,我不需要静态变量,问题归结起来就是在baseRate前面使用double,非常感谢