-3

Visual Studioで簡単なプログラムを作成して、さまざまな車の支払いを合計し、年間コストを計算して方法を使用しようとしています。

中かっこに問題があり、変数を適切に渡しているかどうか。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {


            double loanPayment = 0;
            double insurance = 0;
            double gas = 0;
            double oil = 0;
            double tires = 0;
            double maintenance = 0;
            double monthlyTotal = 0;
            double annualTotal = 0;

            Console.WriteLine("Please enter the following expenses on a per month basis");
            {
                getInput(loanPayment, insurance, gas, oil, tires, maintenance);
                calculate(monthlyTotal, annualTotal);
                Console.WriteLine("Your monthly total is ${0:F2} and your annual total is ${1:F2}", monthlyTotal, annualTotal);
        }
    }//endMain


    static void getInput( ref double loanPayment, ref double insurance, ref double gas, ref double oil, ref double tires, ref double maintenance, ref double monthlyTotal, ref double annualTotal)
{
            Console.WriteLine("How much is the loan payment?");
            while (!double.TryParse(Console.ReadLine(), out loanPayment))
            Console.WriteLine("Error, enter a number");

            Console.WriteLine("How much is the insurance?");
            while (!double.TryParse(Console.ReadLine(), out insurance))
                Console.WriteLine("Error, enter a number");

            Console.WriteLine("How much is the gas?");
            while (!double.TryParse(Console.ReadLine(), out gas))
                Console.WriteLine("Error, enter a number");

            Console.WriteLine("How much is the oil?");
            while (!double.TryParse(Console.ReadLine(), out oil))
                Console.WriteLine("Error, enter a number");

            Console.WriteLine("How much is the tires?");
            while (!double.TryParse(Console.ReadLine(), out tires))
                Console.WriteLine("Error, enter a number");

            Console.WriteLine("How much is the maintenence?");
            while (!double.TryParse(Console.ReadLine(), out maintenance))
                Console.WriteLine("Error, enter a number");
}//endgetInput
{
    static void calculate( ref double loanPayment, ref double insurance, ref double gas, ref double oil, ref double tires, ref double maintenance, ref double monthlyTotal, ref double annualTotal);
            monthlyTotal = loanPayment + insurance + gas + oil + tires + maintenance;

            annualTotal = monthlyTotal * 12;


        }//endCalculate
    }
}
4

4 に答える 4

2

ベストプラクティスは、データを保持し、計算関数をカプセル化するための構造またはクラスを作成することです。骨格は

public class CarLoan
{
public CarLoan()
{
}

public GetInput()
{
// Input
}

public Calculate()
{
// Calculate loan
}
}
于 2013-02-24T23:28:55.603 に答える
1
  • ref渡された値を使用していない必要はありません。out代わりに使用してください
  • 繰り返さないでください-エラーメッセージを一定に抽出します
  • doubleのデフォルト値は0、で初期化する必要はありません0
  • (静的)メソッドはクラス本体にある必要があります
  • 関数型プログラミングスタイルであっても、多くのパラメーターを持つメソッドはお勧めできません

修正されたコードは次のとおりです。

internal class Program
{
    private const string ErrMsg = "Error, enter a number";

    private static void Main(string[] args)
    {
        double loanPayment, insurance, gas, oil, tires, 
               maintenance, monthlyTotal, annualTotal;

        Console.WriteLine("Please enter the following expenses on a per month basis");

        GetInput(out loanPayment, "loan payment");
        GetInput(out insurance, "insurance");
        GetInput(out gas, "gas");
        GetInput(out oil, "oil");
        GetInput(out tires, "tires");
        GetInput(out maintenance, "maintenance");

        Calculate(out monthlyTotal, out annualTotal, loanPayment, insurance, gas, oil, tires, maintenance);

        Console.WriteLine("----------------------------");
        Console.WriteLine("Your monthly total is ${0:F2} and your annual total is ${1:F2}", monthlyTotal, annualTotal);
        Console.WriteLine("----------------------------");
        Console.ReadLine();
    }

    private static void GetInput(out double value, string message)
    {
        Console.WriteLine("How much is the {0}?", message);
        while (!double.TryParse(Console.ReadLine(), out value))
            Console.WriteLine(ErrMsg);
    }

    private static void Calculate(out double monthlyTotal, out double annualTotal, double loanPayment,
                                  double insurance, double gas, double oil, double tires, double maintenance)
    {
        monthlyTotal = loanPayment + insurance + gas + oil + tires + maintenance;
        annualTotal = monthlyTotal * 12;
    }
}
于 2013-02-24T23:28:25.597 に答える
0

calculateメソッドシグニチャの前にメソッドの開始中括弧があります。

calculateメソッドシグネチャの最後、本文の前にセミコロンを配置しました。

于 2013-02-24T23:28:44.373 に答える
0

私はあなたのコードを少し修正する自由を取りました。冗長なロジックのほとんどを除外しました。より高度なことができますが、これを使用して学習していると仮定すると、このバージョンは非常に簡単に理解できると思います。DRY という重要な概念を覚えておいてください。Don't Repeat Yourself の略です。DRY であることは、始めたときにうまくいっているかどうかの良いガイドラインです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class ProgramInputs
    {
        public double LoanPayment;
        public double Insurance;
        public double Gas;
        public double Oil;
        public double Tires;
        public double Maintenance;
    }

    class ProgramOutputs
    {
        public double MonthlyTotal;
        public double AnnualTotal;
    }

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Please enter the following expenses on a per month basis");

            ProgramInputs inputs = getInputs();
            ProgramOutputs outputs = calculate(inputs);

            Console.WriteLine("Your monthly total is ${0:F2} and your annual total is ${1:F2}", outputs.MonthlyTotal, outputs.AnnualTotal);
        }

        static ProgramInputs getInputs()
        {
            // make a new program input object
            ProgramInputs inputs = new ProgramInputs();

            // get each input using a convenient method that factors out the parsing logic
            inputs.LoanPayment = getSingleInput("How much is the loan payment?");
            inputs.Insurance = getSingleInput("How much is the insurance?");
            inputs.Gas = getSingleInput("How much is the gas?");
            inputs.Oil = getSingleInput("How much is the oil?");
            inputs.Tires = getSingleInput("How much are the tires?");
            inputs.Maintenance = getSingleInput("How much is the maintenance?");

            // return them in single object, it's neater this way
            return inputs;
        }

        static double getSingleInput(string message)
        {
            double input = 0;
            Console.WriteLine(message);
            while (!double.TryParse(Console.ReadLine(), out input))
            {
                Console.WriteLine("Error, enter a number");
            }
            return input;
        }

        static ProgramOutputs calculate(ProgramInputs inputs)
        {
            ProgramOutputs outputs = new ProgramOutputs();
            outputs.MonthlyTotal = inputs.LoanPayment + inputs.Insurance + inputs.Gas + inputs.Oil + inputs.Tires + inputs.Maintenance;
            outputs.AnnualTotal = outputs.MonthlyTotal * 12;

            return outputs;
        }
    }
}
于 2013-02-25T00:56:09.907 に答える