2

私は初心者のプログラマーで、数日間これをいじっています... double を保存する方法が見つからないようです。一連の if ステートメントを実行してから、その double を に表示し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

}

}

問題は最終的な//引用ですが、BaseRate は変更されておらず、4000.0 のままです。可能性ごとに新しい変数名を入力する必要は本当にありません ("m または 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 に答える