0

ユーザーがクラブ会員かどうかを判断し、年齢に基づいて割引額を表示するプログラムを作成しようとしています。プログラムを作成しましたが、解決策が見つからないエラーがいくつか発生しています。このサイトや他のサイトを検索して、何が間違っているのかを見つけようとしましたが、行ったトラブルシューティングはすべて失敗しました。私はプログラマーを学んでいるので、私が見逃しているのは本当に単純なことだと確信しています。問題に関するご意見をいただければ幸いです。現在のコンテキストに年齢が存在しないというエラーが発生する理由はわかっていますが、「年齢」が正しく処理されるように、コードに何が欠けているのかわかりません。

これが私のコードです:

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

namespace PA05
{
    class DiscountApp
    {
        public static void Main(string[] args)
        {
            DisplayTitle();
            InputMembershipStatus(age);
            DetermineDiscount(age);
            TerminateProgram();
        }

        public static void DisplayTitle()
        {
            Console.WriteLine("Programming Assignment 5 - Determine Discount\n\tProgrammer: ");
            Console.WriteLine();
            DrawLine();
        }

        public static void InputMembershipStatus(int age)
        {
            Console.WriteLine("Are you a Club Member? <Y or N>: ");
            string aValue = Console.ReadLine();
            if (aValue == "Y" || aValue == "y" || aValue == "Yes" || aValue == "yes")
            {
                age = InputAge();
            }
            else if (aValue == "N" || aValue == "n" || aValue == "No" || aValue == "no")
            {
                Console.WriteLine("Sorry, discounts apply to Club Members only.");
                TerminateProgram();
            }

        }

        public static int InputAge()
        {
            int age;
            Console.Write("Please enter the customer's age: ");
            age = Convert.ToInt32(Console.ReadLine());
            return age;

        }

        public static double DetermineDiscount(int age)
        {
            double discountAmount;
            if (age <= 10 || age >= 60)
            {
                discountAmount = .15;
                Console.WriteLine("The discount is a  {0:P2}", discountAmount);
            }
            else 
            {                
                discountAmount = .1;
                Console.WriteLine("The discount is b {0:P2}", discountAmount);
            }
            return discountAmount;
        }

        public static void DrawLine()
        {
            Console.WriteLine("_________________________________________________________");
        }

        public static void TerminateProgram()
        {
            DrawLine();
            Console.WriteLine("Press any key to terminate the program...");
            Console.ReadKey();
        }
    }
}
4

3 に答える 3

0

加えMainて:

int age = 22; //initialize it
于 2013-10-12T23:27:59.817 に答える
0

変数ageは呼び出しで初めて使用されるInputMembershipStatus(age);ため、コンパイラはローカル変数またはグローバル クラス レベルで宣言された変数が存在すると想定しますが、その変数のローカルまたはグローバルの宣言がないため、エラー メッセージが表示されます。 .

プログラムを修正するために最初に行うことはInputMembershipStatus、渡されたage(実際には必要ありません) の削除を変更し、ユーザーに要求された値を返すことです。従来の値 -1 は、ユーザーが正しい年齢値を入力していないことを知らせる方法として使用されます。

    public static int InputMembershipStatus()
    {
        int age = -1;
        Console.WriteLine("Are you a Club Member? <Y or N>: ");
        string aValue = Console.ReadLine();
        if (aValue == "Y" || aValue == "y" || aValue == "Yes" || aValue == "yes")
        {
            age = InputAge();
        }
        else if (aValue == "N" || aValue == "n" || aValue == "No" || aValue == "no")
        {
            Console.WriteLine("Sorry, discounts apply to Club Members only.");
            TerminateProgram();
        }
        return age;
    }

次に、関数を修正mainしてこの値を取得し、に渡すことができますDetermineDiscount

// Ask the age to the user and store it in a local variable here
int age = InputMembershipStatus();

// If we have received a valid value for age, 
// pass that local value to the DetermineDiscount function
if(age != -1)
    DetermineDiscount(age);

TerminateProgram();

最後に、InputAgeメソッドには別の重要な修正が必要です。(あなたの主な問題とは関係ありませんが、それでも重要です)

   public static int InputAge()
   {
        int age;
        Console.Write("Please enter the customer's age: ");
        if(int.TryParse(Console.ReadLine(), out age))
            return age;
        else
            return -1;

   }

ここで、ユーザー入力を確認する必要があります。数値以外の入力でを使用Convert.ToInt32すると、例外が発生してプログラムがクラッシュします (何も入力せずに Enter キーを押してみてください。空白の文字列でも同じ結果になります)。代わりに、Int32.TryParseは入力を有効な整数値に変換しようとし、成功した場合は真の値と渡された引数に変換された数値を返します。再び従来の値 -1 を返して無効な年齢入力を示し、プログラムを終了します

于 2013-10-12T23:28:44.027 に答える