0

只是有点迷失在这里。我的问题是我编写了一个简单的代码块,允许用户选择一种水果。代码做了我想做的事情,除了一个问题,我需要它循环回到代码的开头,以便用户重新选择一个可选的水果。

但是,我似乎无法让它工作,但我怀疑问题在于我对循环的理解需要更多关注。我知道我需要一个初始化程序和某种条件来执行循环。我尝试了很多(疯狂的)事情,包括尝试像这样执行循环:for (string[ ] fruitArray = {"Banana", "Apple", "Orange", "Pineapple"}); 但是编译器没有它,我想堆栈溢出社区也不会接受。任何帮助和建议表示赞赏。

{

            Console.WriteLine("\n", "\n");

            string[] fruitArray = {"Banana", "Apple", "Orange", "Pineapple"};

            Console.WriteLine("Please select your fruit: \n\n{0} \n{1} \n{2} \n{3}" + "\n", fruitArray[0], fruitArray[1], fruitArray[2], fruitArray[3]);
            string selection = Console.ReadLine();


            if (selection == fruitArray[0])
            {
                Console.WriteLine("\nYou have selected {0} ", fruitArray[0]);
            }
            else if (selection == fruitArray[1])
            {
                Console.WriteLine("\nYou have selected {0} ", fruitArray[1]);
            }
            else if (selection == fruitArray[2])
            {
                Console.WriteLine("\nYou have selected {0} ", fruitArray[2]);
            }
            else if (selection == fruitArray[3])
            {
                Console.WriteLine("\nYou have selected {0} ", fruitArray[3]);
            }
            else
            {
                Console.WriteLine("\nSelection not recognised. Please select fruit: ");
            }

         }

        Console.ReadKey();

    }
  }
}
4

4 回答 4

2

循环不退出

while (true)
            {
                Console.WriteLine("\n", "\n");

                string[] fruitArray = { "Banana", "Apple", "Orange", "Pineapple" };

                Console.WriteLine("Please select your fruit: \n\n{0} \n{1} \n{2} \n{3}" + "\n", fruitArray[0], fruitArray[1],
                                  fruitArray[2], fruitArray[3]);
                string selection = Console.ReadLine();

                switch (selection)
                {
                    case "Banana":
                        Console.WriteLine("\nYou have selected {0} ", fruitArray[0]);
                        break;

                    case "Apple":
                        Console.WriteLine("\nYou have selected {0} ", fruitArray[1]);
                        break;

                    case "Orange":
                        Console.WriteLine("\nYou have selected {0} ", fruitArray[2]);
                        break;

                    case "Pineapple":
                        Console.WriteLine("\nYou have selected {0} ", fruitArray[3]);
                        break;                    
                } 
            }          

带退出条件的循环

            var isLoop = true;

            do
            {
                Console.WriteLine("\n", "\n");

                string[] fruitArray = {"Banana", "Apple", "Orange", "Pineapple"};

                Console.WriteLine("Please select your fruit: \n\n{0} \n{1} \n{2} \n{3}"   + "\n", fruitArray[0],
                                  fruitArray[1],
                                  fruitArray[2], fruitArray[3]);
                string selection = Console.ReadLine();


                switch (selection)
                {
                    case "Banana":
                        Console.WriteLine("\nYou have selected {0} ", fruitArray[0]);
                        break;

                    case "Apple":
                        Console.WriteLine("\nYou have selected {0} ", fruitArray[1]);
                        break;

                    case "Orange":
                        Console.WriteLine("\nYou have selected {0} ", fruitArray[2]);
                        break;

                    case "Pineapple":
                        Console.WriteLine("\nYou have selected {0} ", fruitArray[3]);
                        break;
                    default:
                    isLoop = false;
                    break;
                }
            } while (isLoop);
于 2012-10-31T02:23:36.427 回答
1

对于您的示例,这应该足够了:

string[] fruitArray = { "Banana", "Apple", "Orange", "Pineapple" };

Console.WriteLine("Please select your fruit: \n\n{0} \n{1} \n{2} \n{3}" + "\n", fruitArray[0], fruitArray[1],
                              fruitArray[2], fruitArray[3]);
string selection = Console.ReadLine();

Console.WriteLine("\nYou have selected {0} ", selection);

可能我错过了一些东西,我会很高兴了解什么:)

此外,您可以通过迭代数组来改进第一条消息:

Console.WriteLine("Please select your fruit: \n");

for(int i=0;i<fruitArray.Length;i++)
{
    Console.WriteLine(fruitArray[i]);
}

希望能帮助到你。

于 2012-10-31T22:24:21.677 回答
1

C# 对于http://msdn.microsoft.com/en-us/library/ch45axte.aspx

C# foreach http://msdn.microsoft.com/en-us/library/ttw7t8t6.aspx

string[] fruitArray = { "Banana", "Apple", "Orange", "Pineapple" };

        Console.WriteLine("Please select your fruit: \n");            
        foreach (string fruit in fruitArray)
        {
            Console.Write("\n{0}", fruit);
        }

        Console.WriteLine();



            string selection = Console.ReadLine();
            for (int index = 0; index < fruitArray.Length; index++)
            {
                if (fruitArray[index].Equals(selection))
                {
                    Console.WriteLine("\nYou have selected {0} ", fruitArray[index]);
                    break;
                }
            }

            foreach (string fruit in new[] {"Banana", "Apple", "Orange", "Pineapple" })
            {
                if (fruit.Equals(selection))
                {
                    Console.WriteLine("\nYou have selected {0} ", fruit);
                    break;
                }
            }
于 2012-10-31T02:17:05.397 回答
1

The following code should do exactly what you want. Not only that, but it simplifies the need to even use block if statements or a switch, a simple Array.FindIndex is enough to determine if the input is valid or not. Also, I added an exit clause which so the user can quit the application when they are finished and to remove any cluttering of the UI I am clearing the console window after each "iteration".

    static void Main(string[] args)
    {
        var selection = "";
        while (selection != "q")
        {
            Console.WriteLine(Environment.NewLine);
            string[] fruitArray = { "Banana", "Apple", "Orange", "Pineapple" };

            Console.WriteLine("Please select your fruit (or Q to quit): \n\n{0} \n{1} \n{2} \n{3}", fruitArray[0], fruitArray[1], fruitArray[2], fruitArray[3]);
            Console.Write(Environment.NewLine + "-> ");
            selection = Console.ReadLine().ToLower();

            // valid option selected
            var index = Array.FindIndex(fruitArray, (fruit) => fruit.ToLower() == selection);
            if (index > -1)
            {
                Console.Write("\nYou have selected {0}.", fruitArray[index]);
                ContinuePrompt();
            }
            else if (selection != "q")
            {
                Console.Write("\nSelection not recognised.");
                ContinuePrompt();
            }
        }
     }

    static void ContinuePrompt()
    {
        Console.Write(" Press any key to continue...");
        Console.ReadKey();
        Console.Clear();
    }
于 2012-11-02T13:17:21.607 回答