2

我是一名初学者程序员,现在已经玩了几天了......我似乎找不到一种方法来存储一个 double 通过一系列 if 语句运行它,然后在System.out.println("...").

我尝试过使用数组、开关等。我需要通过更多的东西来运行这个 BaseRate,这取决于我需要修改 BaseRate 并让它存储之前的修改的用户输入。

我想出的最接近的方法是通过几个 if 语句存储 BaseRate,但最终结果仍然是原始数字 (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

}

}

问题是最后的 //quote BaseRate 未修改并保持在 4000.0 我真的不想为每种可能性输入一个新的变量名(因为不仅仅是“m or f”以及“experience”驾驶”。我需要一种方法来根据用户输入在整个 if 语句中进行变量更改,以保持该数字(也不要像这个人想要的那样返回)。这些东西应该很简单......我真的沮丧的!

4

4 回答 4

3

我想出的最接近的方法是通过几个 if 语句存储 BaseRate

问题在于,在这些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块之前在方法中声明一个局部变量 - 目前尚不清楚为什么在这里需要静态变量。

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

于 2012-10-20T19:40:51.893 回答
2

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

double BaseRate = BaseRate2 * 0.95;

改成:

BaseRate = BaseRate2 * 0.95;

同样在这里:

BaseRate = BaseRate2 - ((UserExperience * 0.05) * BaseRate2);
于 2012-10-20T19:40:07.210 回答
2

您正在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完全独立于外部声明。当您退出内部范围时,内部声明被“遗忘”,您再次只能看到外部声明。

以这种方式“遮蔽”现有变量会变得非常混乱,最好避免。

于 2012-10-20T19:40:16.800 回答
1

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

BaseRate = blah blah

代替

double BaseRate = blah blah
于 2012-10-20T19:40:43.767 回答