3

こんにちは、私は設定されたタスクでいくつかの問題を抱えています

タスクの最初の部分は、次のルールで価格表を出力することでした。

50 個までの価格は、それぞれ 5 ポンドです。51 から 80 までの価格はそれぞれ 4 ポンド、81 から 100 までの価格はそれぞれ 2.50 ポンドです。ループ構造と選択ステートメント (if.​​. など) を使用して、プログラムは 10 の倍数から 100 までのウィジェットの価格チャートを出力する必要があります。

私はこれを行いましたが、テーブルが出力されて多数のウィジェットを入力した後、タスクの 2 番目の部分で困惑しました。次に、コストを計算して値を出力する必要があります。ユーザーが「q」または「Q」を入力すると、プログラムは終了します。

ここに完全なコードがあります

using System;
namespace w5Task3
{
class Program
    { public static void Main ( string[] args )
            {

            double PriceEach1 = 5;
            double PriceEach2 = 4;
            double PriceEach3 = 2.50;
            double Quantity = 10;
            int UserOrder=0;

            Console.WriteLine("\n\nBelow is the price chart:\n\n");
            Console.WriteLine("WidgetQuantity\t\t\tPrice\n");
            while (Quantity <=100)

                {   

                    double Price1 = PriceEach1*Quantity;
                    double Price2 = PriceEach2*Quantity;
                    double Price3 = PriceEach3*Quantity;


                        if (Quantity <=50)      
                    {
                        Console.WriteLine("\t{0}\t\t\t{1:C}", Quantity, Price1);
                    }


                        if(Quantity >=51 && Quantity <=80)      
                    {
                        Console.WriteLine("\t{0}\t\t\t{1:C}", Quantity, Price2);
                    }


                        if (Quantity >80 && Quantity <=100)
                    {
                        Console.WriteLine ("\t{0}\t\t\t{1:C}",Quantity, Price3);                        
                    }
                Quantity +=10;
                }


            while (UserOrder >=0)
                {
                    try
                        {
                        Console.WriteLine("Enter the amount of widgets you would like to purchase or press q to quit");
                        string temp = Console.ReadLine();
                        if (temp =="q") break;
                        if (temp =="Q") break;

                        int.TryParse(temp, out UserOrder);

                        double UserPrice;

                        if (UserOrder <=50)
                            {
                                UserPrice = UserOrder*5;
                                Console.WriteLine("The price is {0:C}",UserPrice);
                            }

                        if (UserOrder >=51 && UserOrder <=80)
                            {
                                UserPrice = UserOrder*4;
                                Console.WriteLine("The price is {0:C}",UserPrice");
                            }

                        if (UserOrder >80)
                            {
                                UserPrice = UserOrder*2.5;
                                Console.WriteLine("The price is {0:C}",UserPrice");
                            }


                        }
                            catch(Exception)
                                {
                                    Console.WriteLine("You have entered an incorrect value. Please enter a number or press q to quit");
                                }
                }



            }
    }

私が問題を抱えている部分は次のとおりです。

                while (UserOrder >=0)
                {
                    try
                        {
                        Console.WriteLine("Enter the amount of widgets you would like to purchase or press q to quit");
                        string temp = Console.ReadLine();
                        if (temp =="q") break;
                        if (temp =="Q") break;

                        int.TryParse(temp, out UserOrder);

                        double UserPrice;

                        if (UserOrder <=50)
                            {
                                UserPrice = UserOrder*5;
                                Console.WriteLine("The price is {0:C}",UserPrice);
                            }

                        if (UserOrder >=51 && UserOrder <=80)
                            {
                                UserPrice = UserOrder*4;
                                Console.WriteLine("The price is {0:C}",UserPrice");
                            }

                        if (UserOrder >80)
                            {
                                UserPrice = UserOrder*2.5;
                                Console.WriteLine("The price is {0:C}",UserPrice");
                            }


                        }
                            catch(Exception)
                                {
                                    Console.WriteLine("You have entered an incorrect value. Please enter a number or press q to quit");
                                }
                }
}

プログラムを終了させるか、1 つの UserPrice を実行させることができますが、注文した金額に応じて価格を変更する必要がある場合です。

どんな助けや提案も大歓迎です!

4

4 に答える 4

2

67行目と73行目の定数式に改行があります。

それらを修正すれば、すべて正常に実行されます。

于 2012-11-19T16:04:47.580 に答える
2

あなたの問題は、64 行目と 70 行目の UserPrice の後の引用符だと思います。

Console.WriteLine("The price is {0:C}",UserPrice");

それを除く

于 2012-11-19T16:09:26.943 に答える
1

最も簡単な方法UserOrderは、注文のその部分の価格を計算した後で調整することです。どちらの方向にも進むことができますが、基本的には次のようになります。

if (HasThisQuantityRange)
{
   Total += ThisAmount * (Lower of: ThisQuantity or UserOrder);
   UserOrder -= (Lower of: ThisQuantity or UserOrder);
}

if (UserOrder > 0 && HasAdjustedQuantityRange)
{
   Total += ThisAmount * (Lower of: ThisQuantity or UserOrder);
   UserOrder -= (Lower of: ThisQuantity or UserOrder);
}

等々。

明らかに、これはすべて擬似コードであり、自分で実装する必要がありますが、うまくいけば正しい方向に向けることができます。

于 2012-11-19T16:01:53.073 に答える
0

あなたが抱えている問題が正確に何であるかを理解するのに苦労しています。注文の正しい計算を取得するのに苦労していますか、または Quit 動作が期待どおりに動作していません。

一般に、 while ループ条件にそのような一時変数を使用するのは悪い形だと思います。コンソール アプリで繰り返したいときは、通常、次のようにループ条件専用の変数を設定します。

bool isRunning = true;
while (isRunning)
{
     ....

次に、入力を確認するときに

if (temp.ToUpper() == "Q")
{
     isRunning = false;
     break;
}
于 2012-11-19T16:07:22.403 に答える