2

最後にサイコロを振ってどのキャラクターが勝つかを決定するコードを作成しようとしましたが、エラーがあると言い続けます (割り当てられていないローカル変数 ' skillmodifier ' の使用) & (割り当てられていないローカル変数 ' strengthmodifier ' の使用) )。助けていただければ幸いです。PS Visual Studio 2010 で短期間だけプログラミングを行っています。この問題の解決策を見つけるのを手伝ってください。変数' strengthmodifier ' と ' skillmodifier 'を 2 回使用するために問題が発生します。心からありがとう、ヴィカシュ。以下のタスクブリーフとその後のコードを貼り付けます。

タスク 3 遭遇の結果の決定 2 人のキャラクターが遭遇した場合、結果は次のプロセスによって決定されます。

• 2 つのキャラクターの強さ属性の差が計算されます。

• この差を 5 で割り、切り捨てて「強度修飾子」を作成します。</p>

• スキル属性に対してプロセスが繰り返され、「スキル修飾子」が作成されます。</p>

• 各プレイヤーは 6 面ダイスを投げます。

• 両方のサイコロの得点が同じ場合、変更は行われません

• スコアが同じでない場合、スコアが最も高いプレイヤーが、自分のキャラクターの強さの値に「強さの修正」を、スキルの値に「スキルの修正」を追加します。

• サイコロのスコアが低いプレイヤーは、キャラクターの強さとスキルの値からこれらの修正値を差し引きます。

• スキル値がマイナスになると、ゼロとして保存されます

• 強度値がゼロまたはマイナスになると、キャラクターは死亡します。

プログラムは次のことを行う必要があります。

* • ユーザーが 2 つの文字の強さとスキルを入力できるようにします。

• 上記のプロセスを使用して遭遇の結果を表示します。このプロセスを説明するアルゴリズムを設計します。コードを書き、テストし、評価します。*

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

        namespace Task3
       {
         class Program
          {

            static void loopfsto()
             {

            Console.WriteLine("Please enter a value of strength, and then press enter");
            string csto = Console.ReadLine(); // Read string from console
            int csto1;
            if (int.TryParse(csto, out csto1)) // Try to parse the string as an integer
            {
                Console.WriteLine("Your chosen number is " + csto1 + ".");
                Console.ReadKey();
            }
            else
            {
                Console.Clear();
                Console.WriteLine("Not an integer!");
                Console.ReadKey();
                Console.Clear();
                loopfsto();
            }
        }

        static void loopfsko()
        {
            Console.WriteLine("Please enter a value of skill, and then press enter");
            string csko = Console.ReadLine(); // Read string from console
            int csko1;
            if (int.TryParse(csko, out csko1)) // Try to parse the string as an integer
            {
                Console.WriteLine("Your chosen number is " + csko1 + ".");
                Console.ReadKey();
            }
            else
            {
                Console.Clear();
                Console.WriteLine("Not an integer!");
                Console.ReadKey();
                Console.Clear();
                loopfsko();
            }
            Console.Clear();
        }

        static void loopfstt()
        {
            Console.WriteLine("Please enter a value of strength for, and then press enter");
            string cstt = Console.ReadLine(); // Read string from console
            int cstt1;
            if (int.TryParse(cstt, out cstt1)) // Try to parse the string as an integer
            {
                Console.WriteLine("Your chosen number is " + cstt1 + ".");
                Console.ReadKey();
            }
            else
            {
                Console.Clear();
                Console.WriteLine("Not an integer!");
                Console.ReadKey();
                Console.Clear();
                loopfstt();
            }
            Console.Clear();
        }

        static void loopfskt()
        {
            Console.WriteLine("Please enter a value of skill for, and then press enter");
            string cskt = Console.ReadLine(); // Read string from console
            int cskt1;
            if (int.TryParse(cskt, out cskt1)) // Try to parse the string as an integer
            {
                Console.WriteLine("Your chosen number is " + cskt1 + ".");
                Console.ReadKey();
            }
            else
            {
                Console.Clear();
                Console.WriteLine("Not an integer!");
                Console.ReadKey();
                Console.Clear();
                loopfskt();
            }

        }

        static void Main(string[] args)
        {

            string Character1;
            string Character2;
            int strengthmodifiertoround;
            int skillmodifiertoround;
            int strengthmodifier;
            int skillmodifier;
            Console.Title = "Strength and Skill";

            Console.WriteLine("Welcome to Strength and Skill, please press enter to continue.");
            Console.ReadKey();
            Console.Clear();

            Console.WriteLine("Please enter a name for character 1, then press enter.");
            Character1 = Console.ReadLine();
            Console.Clear();

            Console.WriteLine("Please enter a name for character 2, then press enter.");
            Character2 = Console.ReadLine();
            Console.Clear();

            Console.WriteLine("Please enter a value of strength for " + Character1 + ", and then press enter");
            string csto = Console.ReadLine(); // Read string from console
            int csto1;
            if (int.TryParse(csto, out csto1)) // Try to parse the string as an integer
            {
                Console.WriteLine("Your chosen number is " + csto1 + ".");
                Console.ReadKey();
            }
            else
            {
                Console.Clear();
                Console.WriteLine("Not an integer!");
                Console.ReadKey();
                Console.Clear();
                loopfsto();
            }


            Console.Clear();


            Console.WriteLine("Please enter a value of skill for " + Character1 + ", and then press enter");
            string csko = Console.ReadLine(); // Read string from console
            int csko1;
            if (int.TryParse(csko, out csko1)) // Try to parse the string as an integer
            {
                Console.WriteLine("Your chosen number is " + csko1 + ".");
                Console.ReadKey();
            }
            else
            {
                Console.Clear();
                Console.WriteLine("Not an integer!");
                Console.ReadKey();
                Console.Clear();
                loopfsko();
            }
            Console.Clear();

            Console.WriteLine(Character1 + " has a strength of " + csto1 + " and a skill of " + csko1 + ".");
            Console.ReadKey();
            Console.Clear();

            Console.WriteLine("Please enter a value of strength for " + Character2 + ", and then press enter");
            string cstt = Console.ReadLine(); // Read string from console
            int cstt1;
            if (int.TryParse(cstt, out cstt1)) // Try to parse the string as an integer
            {
                Console.WriteLine("Your chosen number is " + cstt1 + ".");
                Console.ReadKey();
            }
            else
            {
                Console.Clear();
                Console.WriteLine("Not an integer!");
                Console.ReadKey();
                Console.Clear();
                loopfstt();
            }
            Console.Clear();



            Console.WriteLine("Please enter a value of skill for " + Character2 + ", and then press enter");
            string cskt = Console.ReadLine(); // Read string from console
            int cskt1;
            if (int.TryParse(cskt, out cskt1)) // Try to parse the string as an integer
            {
                Console.WriteLine("Your chosen number is " + cskt1 + ".");
                Console.ReadKey();
            }
            else
            {
                Console.Clear();
                Console.WriteLine("Not an integer!");
                Console.ReadKey();
                Console.Clear();
                loopfskt();
            }
            Console.Clear();

            Console.WriteLine(Character2 + " has a strength of " + cstt1 + " and a skill of " + cskt1 + ".");
            Console.ReadKey();
            Console.Clear();
//--- Finds out if strength for character 1 is higher than 2 or vice versa. Then finds difference between two and makes a variable called strengthmodifier ---//

            {
                if (csto1 < cstt1)
                {
                    strengthmodifiertoround = cstt1 - csto1;
                    strengthmodifier = strengthmodifiertoround / 5;   
                }
                if (cstt1 < csto1)
                {
                    strengthmodifiertoround = csto1 - cstt1;
                    strengthmodifier = strengthmodifiertoround / 5;
                }
            }
//--- Finds out if skill for character 1 is higher than 2 or vice versa. Then finds difference between two and makes a variable called skillmodifier ---//

            {
                if (csko1 < cskt1)
                {
                    skillmodifiertoround = cskt1 - csko1;
                    skillmodifier = skillmodifiertoround / 5; 
                }
                if (cskt1 < csko1)
                {
                    skillmodifiertoround = csko1 - cskt1;
                    skillmodifier = skillmodifiertoround / 5;
                }
            }
//--- Tells user to put input and roll a virtual dice (which is actually creating a number between 1 and 6) ---//
            Console.WriteLine(Character1 + ", please press enter to roll dice");
            Console.ReadKey();
            Random rand = new Random();
            int character1RandomNumber = rand.Next(1, 6);

            Console.WriteLine(Character2 + ", please press enter to roll dice");
            Console.ReadKey();
            Random rand1 = new Random();
            int character2RandomNumber = rand1.Next(1, 6);
            Console.WriteLine(Character1 + " rolled a " + character1RandomNumber + " and " + Character2 + " rolled a " + character2RandomNumber + ".");
            Console.ReadKey();
            if (character1RandomNumber < character2RandomNumber)
            {
                int char2st = cstt1 + strengthmodifier;
                int char2sk = cskt1 + skillmodifier;
                int char1st = csto1 - strengthmodifier;
                int char1sk = csko1 - skillmodifier;
            }
            if (character2RandomNumber < character1RandomNumber)
            {

            }

                int ch2st = cstt1 - strengthmodifier;
                int ch2sk = cskt1 - skillmodifier;
                int ch1st = csto1 + strengthmodifier;
                int ch1sk = csko1 + skillmodifier;



        }
    }
}
4

5 に答える 5

4

実際、あなたの問題は、skillmodifier と strengthmodifier がすべてのコード パスで割り当てられた値を取得しないためだと思います。すなわち。これらは if 句内から値が割り当てられるだけであり、Visual Studio はすべての可能な結果に割り当てられているかどうかを判断できません。この警告によってコードのコンパイルが停止することはありませんが、それを消したい場合は、次のようにすることができます

int skillmodifiertoround = 0;

ただの代わりに

int skillmodifiertoround;

これで、skillmodifiertoround に宣言時に値が与えられます。

編集:「この警告はコードのコンパイルを停止するべきではありません」-明らかに、プログラムがc#で正しくコンパイルされなくなりますが、vbの同じエラーは警告のみを表示しますが、コンパイルは続行します。

于 2012-12-31T11:37:21.500 に答える
2

そのかなり単純な本当に

int skillmodifier;

使用する前に、値を割り当てる必要があります。つまり、デフォルトの値であっても、値を指定してください。そうでなければ、プログラムはそれが持つ価値を知りません。

だから何か

int skillmodifier = -1;

あなたのためにそれを修正します。

于 2012-12-31T11:35:17.367 に答える
1

宣言するときはint skillmodifier、デフォルト値が何であれ、それを宣言します。int skillmodifier = 0;

同じことをstrengthmodifierしてください。

問題は、これらのパラメーターが設定されていないコードを実行する方法をコンパイラーが検出できることです。

于 2012-12-31T11:35:48.773 に答える
0

他の人があなたに答えをくれたと思いますが、私は何か他のものを見つけました。

//メソッドの代わりにif(tryparse){//完了}else//ループ

メソッドをintを返すメソッドに変換してから...

int csko = loopCsko()

于 2012-12-31T12:57:04.927 に答える
0

C# のローカル変数は、使用する前に初期化する必要があります。

MSDNから

関連する質問も参照してください。割り当てられていないローカル変数が自動的に初期化されないのはなぜですか?

タイプが不明なジェネリックの場合は、デフォルトのキーワードを使用します

于 2012-12-31T11:38:57.880 に答える