2017-01-29 14 views
1

コードへの完全なJavaプログラム以下:それはスピード違反がある場合シンプルなのEclipse IDEのJavaプログラム

  • それは赤色光違反がある場合には、罰金がドライバー年俸
  • の1.75%です違反の場合、その罰金は、速度限度を超える1マイル/時間ごとの給与の0.5%に、年間給与の1.2%です。

あなたは何をする必要がありますか?彼/彼女のフルネームを入力して、ドライバ

  • プロンプト役員の完全な名前を入力する

    • プロンプトユーザー/役員。
    • ユーザー/役員にドライバの年俸を入力するように促します。
    • 違反の種類を入力するように警察に促す(赤いライトの場合は1、スピードの場合は2)
    • 速度を上げると、速度制限を超えて何マイル/時間を入力するかをユーザーに促します。ドライバ
    • 年俸の役員
    • 違反の
      • 名:
      • は、以下を含む完全なレポートを印刷、その後、評価されるべきであるどのくらいの罰金であれば...他のセットを評価します評価罰金のタイプ(あなたが1または2(レッドライトやスピード違反だけでなく、それを綴るする必要があります)
      • 量(小数点以下2桁に$記号とラウンドを印刷)

    また、次の点を考慮する必要があります。

    • あなたのプログラムは、違反のタイプのための1または2以外の任意のコードを受け入れてはいけません。
    • あなたの入力は、別の方法で処理する必要がありますが、main()では処理しないでください。
    • 評価は、独自の方法で処理する必要があります。
    • レポートは別の方法で処理する必要があります。
    • 新しいドライバでは、プログラム全体を繰り返す必要があります。

    エクストラクレジット:

    package FinFines_ 
    import java.util.Scanner; 
    
    /* 
    * Description: This program assesses fines for traffic violations. 
    */ 
    public class FinFines_ 
    { 
        static Scanner get = new Scanner(System.in); 
        //declarations: 
        static double mph = 0; 
        static double salary = 0; 
        static double fines = 0; 
        static int violation = 0; 
        static int answer = 1; //1 to continue or 0 to quit 
        static String officer = " "; 
        static String driver = " "; 
    
        public static void main(String[] args) 
        { 
    
         //input: 
         while (answer != 0) //while will allow the program to repeat for a new driver 
         { 
          input(officer, driver, salary, violation); //call input method 
    
          //calculations: 
          fines = calculateFines(violation, fines, salary, mph); //call calculateFines method 
    
          //Output: 
          disp(officer, driver, salary, violation,fines); //call disp method 
    
          //ask user if they would like to continue 
          System.out.println("Would you like to write a new ticket? Press 1 for yes or 0 for no: "); 
          answer = get.nextInt(); 
        }//end while 
    
        System.out.println("Goodbye!"); 
    
    
    }//end main 
    //================================================================= 
    public static void input(String officer, String driver, double salary, int violation) //Input Method 
    { 
        System.out.println("Officer, please enter your first and last name: "); 
        officer = get.nextLine(); 
        System.out.println("Please the driver's first and last name: "); 
        driver = get.nextLine(); 
        System.out.println("Please enter the driver's salary: "); 
        salary = get.nextDouble(); 
        System.out.println("Press 1 if the driver ran a red light. Press 2 if the driver was speeding. Press 3 if the driver is subject to both violations. "); 
        violation = get.nextInt(); 
        System.out.println("How many miles per hour was the driver going over the speed limit?: "); 
        mph = get.nextDouble(); 
    
    }//end input 
    //================================================================= 
    public static double calculateFines(int violation, double fines, double salary, double mph) //calculates the amount of fines for either violation 
    { 
        { 
         if (violation == 1) 
          return (salary * 1.75); 
         else if (violation == 2) 
          return (salary * 1.2) + (mph * .5 * salary); 
         else if (violation == 3) 
          return (salary * 1.75) + ((salary * 1.2) + (mph * .5 * salary)); 
         return 0; 
        } 
    }//end calculateFines 
    //================================================================= 
    public static void disp(String officer, String driver, double salary, int violation, double fines) //Display Method 
    { 
        System.out.println ("Your name is Officer " + officer + "\nThe name of the driver you pulled over is: " + driver); 
        System.out.println (String.format("The driver's annual salary is $%.2f", + salary)); 
        { 
         if (violation == 1) 
         System.out.println("\nThe type of traffic violation the driver received: Red Light"); 
          else if (violation == 2) 
           System.out.println("\nThe type of traffic violation the driver received: Speeding"); 
          else if (violation == 3) 
           System.out.println("\nThe type of traffic violation the driver received: Red Light & Speeding"); 
        } 
        System.out.println (String.format("The amount of fines that will be assessed is $%.2f", + fines)); 
    }//end disp 
        }//end class FinFines_ 
    

    :ここでは赤


    が私のコードであるときに、ドライバは違反...キャッチスピード違反やパッシングの両方の対象とする場合、独自のソリューションを開発ここに問題があります:

    1. 私のプログラムの値を入力すると、プログラムは名前や数字を入力しなかったかのように動作します。
      :「ドライバーの年俸が評価される罰金の$ 0.00
      額は$ 0.00さ
      あなたの名前あなたは、路肩に停車ドライバの名前役員
      である」私は何を行うことができ、それは
      であると言うすべてプログラムが入力値を保持していることを確認しますか?

    2. 1を押して続行すると、担当者の名前を尋ねるときに最初の行がスキップされます。変数の名前を入力することはできません。 プログラムでこの行をスキップしないようにするにはどうすればよいですか?

    3. 「返品0」に問題はありますか?ステートメント?もし私がその声明を含んでいなければ、私のプログラムは動かすことができませんが、私のプログラムがすべての値に0を与えていることを含めて私が心配しています。

  • +0

    'nextLine()'と 'nextInt()'と 'nextDouble()'を混在させる方法についていくつか調べてください。 –

    +0

    リンクを挿入できますか?私の教授は私にそのように書くように指示したので、それが間違っているかどうかはわかりません。 –

    +0

    それらを使用することは問題ではありません。入力バッファーに残っている改行文字には注意が必要です。これらはあなたが見る行動を引き起こします。以前の読み込みが改行文字を消費しない場合は、次の読み込みで読み込まれ、入力がないとみなされます。 –

    答えて

    0

    calculateFines()メソッドでは、値に1.75を乗じたことに気付きました。これはオリジナルの175%を与えます。 1.75%を見つけるには、0.0175を掛ける必要があります。これは、他のすべての値にも適用されます。

    ホープこれはあなたが改行文字についてnextLine()nextInt()、およびnextDouble()の行動について読む必要が

    0

    staticでもよい練習ではありませんが。

    public static void input(String officer, String driver, double salary, int violation) //Input Method { 
    

    public static double calculateFines() { 
    

    public static void disp(String officer, String driver, double salary, int violation, double fines) //Display Method { 
    
    012へ
    public static void input() { 
    

    public static double calculateFines(int violation, double fines, double salary, double mph) //calculates the amount of fines for either violation { 
    

    に - しかし、ちょうどあなたのコードの作業は、次のように、すべてのあなたの方法を変更作ります

    これは、すべての静的フィールドがあなたがthei定義内の同じパラメータを使用して、これらのメソッドを呼び出して、今、あなたのmain()

    while (answer != 0) { 
        input(); 
        fines = calculateFines(); //call calculateFines method 
        disp(); 
        System.out.println("Would you like to write a new ticket? Press 1 for yes or 0 for no: "); 
         answer = get.nextInt(); 
    } 
    

    が含まれるように更新されていることを確認します

    public static void disp() { 

    へ注
    - 私はテキストを短くカットしコメントを削除しました。オード。

    +0

    これは私の問題#1を修正しました、ありがとう!なぜ、すべてを静的にしてはいけないのですか?私の間違いの代わりになるものは何ですか?私の問題#2を解決する方法も知っていますか? 1を押してプログラムを再開すると、役員の名前を入力することはできません(1行目)。 –

    +0

    より良いアプローチは、Officer、DriverなどとしてObjectを定義し、name、speedなどの個々の属性を持つオブジェクトを定義し、その属性の周りにロジックを構築するためにゲッターとセッターを使用することです。 – nullpointer

    0
    1. に役立ちます。これらのいずれかが入力バッファーに改行文字を残した場合、次の文字はその文字を表示し、それ以上の入力は消費しません。これはあなたが見ているものです。

      問題を解決するには、Scannerから改行文字を読み取り、無視する必要があります。適切な方法を見つけるには、the Javadocs for Scannerを参照してください。

    2. これは#1と同じ問題です。

    3. おそらく、ifステートメントがすべての可能な値violationを占める限り、この返品に問題はありません。実際、これは非常に良い解決策です。violationに無効な値が含まれているとすぐに表示されるためです。また、変数に対して有限数の選択肢を定義できるようにする列挙型についても学習する必要があります。

    +0

    私は他の誰かがあなたの最初のコメントと同じことを言ったと信じています。この問題の解決へのリンクはありますか?私はその問題を解決するために何をすべきかはわかりません。私が知っているのは問題が存在することだけです。 –

    +0

    @Stackerrはい、私はあなたの質問にコメントを掲示し、答えをいくつか拡大しています。解決策についてのヒントについては、私の編集を参照してください。 –

    +0

    だから、私は次のコマンドがさらに入力をブロックしていることを理解しています。記事に基づいて、それはリセットメソッドのコマンドを使用してリセットする必要があるようですね? –

    関連する問題