C#如何摆脱这个循环?

时间:2017-08-20 00:42:28

标签: c#

如何摆脱这种循环?

我写了一个程序,检查数字中相应的位置是否相同。控制台输出应该为true或false。我写了这个,然后添加了与用户交互的顶部,现在我陷入了循环。我该如何摆脱它?

using System;

namespace DeliverablePart1
{
    class DeliverablePart1
    {
        static void Main(string[] args)
        {
            string gameAnswer;
            bool repeat1 = true, repeat2 = true;

            while (repeat1 == true)

            {
                repeat2 = true;
                Console.WriteLine("Would you like to compare 2 numbers to see if their corresponding place is same total?");
                gameAnswer = Console.ReadLine();

                while (repeat2 == true)
                {
                    if (gameAnswer == "yes" || gameAnswer == "yes" || gameAnswer == "YES")
                    {
                        Console.WriteLine("Please enter a three digit whole number");
                        string firstValue = Console.ReadLine();
                        int firstNumber = ValidInteger(firstValue);

                        Console.WriteLine("Please enter a second three digit whole number");
                        string secondValue = Console.ReadLine();
                        int secondNumber = ValidInteger(secondValue);

                        repeat1 = false;
                        repeat2 = false;
                    }

                    else if (gameAnswer == "no" || gameAnswer == "No" || gameAnswer == "NO")
                    {
                        Console.WriteLine("Okay, exiting now");
                        repeat1 = false;
                        repeat2 = false;
                    }
                    else
                    {
                        Console.WriteLine("I do not understnad what you have said");
                        repeat2 = false;
                    }

                    void Add(int firstNumber, int secondNumber)
                    {
                        int length1 = firstNumber.ToString().Length;
                        int length2 = secondNumber.ToString().Length;

                        string userInput;

                        if (length1 == length2)
                        {
                            string Answer = Convert.ToString(Compare(firstNumber, secondNumber, length1));
                        }
                        else
                        {
                            userInput = "invalid user input - Check number of digits next time.";
                            Console.WriteLine(userInput);
                            Console.ReadKey();
                        }
                        Console.ReadKey();
                    }

                    int ValidInteger(string digit1)
                    {
                        int value = 0;
                        string notInt = "This is not an integer.";
                        {
                            bool successfullyParsed = int.TryParse(digit1, out value);
                            if (successfullyParsed)
                            {
                                int firstNumber = Convert.ToInt32(value);
                                return value;
                            }
                            else
                            {
                                Console.WriteLine(notInt);
                                Console.ReadKey();
                                Environment.Exit(0);
                                return value;
                            }
                        }
                    }
                    string Compare(int a, int b, int c)
                    {
                        int lastDigitA;
                        int lastDigitB;

                        lastDigitA = (a % 10);
                        lastDigitB = (b % 10);
                        int sumStatic = lastDigitA + lastDigitB;

                        do
                        {
                            lastDigitA = (a % 10);
                            lastDigitB = (b % 10);
                            a = a / 10;
                            b = b / 10;
                            c--;
                            int sumCompare = lastDigitA + lastDigitB;

                            if (sumCompare != sumStatic)
                            {
                                Console.WriteLine("False");
                                return "False";
                            }
                        }
                        while (c != 0);
                        Console.WriteLine("True");
                        return "True";
                    }

                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

根据我的理解,看起来您希望用户输入三个整数(通过一些输入验证),并通过Compare()函数放入三个整数。如果函数返回true,则对控制台说“True”,如果它为false,则向控制台说“False”。如果是这种情况,我会将您的代码重构为此(并且它不会陷入循环):

using System;

namespace DeliverablePart1
{
    internal class DeliverablePart1
    {
        private static void Main(string[] args)
        {
            Console.WriteLine("Would you like to compare 2 numbers to see if their corresponding place is same total?");
            var shouldContinue = Console.ReadLine();

            if (shouldContinue != null && shouldContinue.Equals("yes", StringComparison.CurrentCultureIgnoreCase))
            {
                var firstNum = GetIntFromUser("Please enter a three digit whole number");
                var secondNum = GetIntFromUser("Please enter a three digit whole number");
                var thirdNum = GetIntFromUser("Please enter a three digit whole number");

                Console.WriteLine(Compare(firstNum, secondNum, thirdNum) ? "True" : "False");
            }
            else
            {
                Console.WriteLine("Exiting");
            }

            // waits for the user to press a key to exit the app, so that they can see their result
            Console.ReadKey();
        }

        /// <summary>
        /// Makes the user enter in a three digit number, and exits if they say "no"
        /// </summary>
        /// <param name="msg">The message prompt to ask for the integer</param>
        /// <returns>System.Int32., or will exit</returns>
        public static int GetIntFromUser(string msg)
        {
            while (true)
            {
                Console.WriteLine(msg);
                var valFromUser = Console.ReadLine()?.Trim();

                if (valFromUser != null)
                {
                    int result;
                    if (int.TryParse(valFromUser.Trim(), out result) && valFromUser.Length == 3)
                    {
                        return result;
                    }
                    if (valFromUser.Equals("no", StringComparison.CurrentCultureIgnoreCase))
                    {
                        Console.WriteLine("Exiting.");
                        Environment.Exit(0);
                    }
                }
                Console.WriteLine("Hmm, that's not a three digit number. Try again.");
            }
        }

        public static bool Compare(int a, int b, int c)
        {
            var lastDigitA = a % 10;
            var lastDigitB = b % 10;
            var sumStatic = lastDigitA + lastDigitB;

            do
            {
                lastDigitA = a % 10;
                lastDigitB = b % 10;
                a = a / 10;
                b = b / 10;
                c--;
                var sumCompare = lastDigitA + lastDigitB;

                if (sumCompare != sumStatic)
                {
                    return false;
                }
            } while (c != 0);
            return true;
        }
    }
}