簡體   English   中英

如何打破循環並排除 C# 中的最后一個輸入?

[英]How can I break the loop and exclude the last input in C#?

我必須編寫一個代碼來詢問用戶將輸入多少部電影。 輸入電影數量后,應要求用戶輸入電影的名稱。 所有名稱都將添加到數組movies 如果用戶輸入“退出”,程序應該停止並顯示用戶已經輸入的電影。

我寫了這段代碼:

Console.WriteLine("Enter number of movies:");
int num1 = int.Parse(Console.ReadLine());
string[] movies = new string[num1];

for (i = 0; i < num1; i++)
{
    Console.WriteLine("Enter movie name:");
    movies[i] = Console.ReadLine();
    if(movies[i] == "Exit" || movies[i] == "exit")
    {
        break;
    }
}
for (i = 0; i < num1; i++)
{
    Console.WriteLine("Movie {0} is {1}", i + 1, movies[i]);
}

問題是:如果用戶編寫exit ,程序會將exit顯示為電影。 例如:用戶想輸入 4 部電影,第 1 部電影作為第 1 部電影進入,作為first 2 部電影exit 本例中程序的output如下:

movie 1 is first 
movie 2 is exit
movie 3 is
movie 4 is

但是程序應該只顯示輸入的第一部電影。 我究竟做錯了什么?

將輸入的電影設置為臨時變量。 僅當它不是您的退出條件時才添加它。

//Rest of the code left out for simplicity
Console.WriteLine("Enter movie name:");
string movie = Console.ReadLine();
if(movie.Equals("exit", StringComparison.OrdinalIgnoreCase)
    break;
else
    movies[i] = movie;  

您可以進行一些額外的改進,例如使用List 這樣你就不需要管理大小和提示用戶。

首先,讓我們看看你有什么:在檢查是否退出之前添加值。

此外,您可以通過忽略字母大小寫進行比較(Broots Waymb 建議的答案)。

最后,您打印整個數組而不檢查是否有一些值。

Console.WriteLine("Enter number of movies:");
int num1 = int.Parse(Console.ReadLine());
string[] movies = new string[num1];

for (i = 0; i < num1; i++)
 {
    Console.WriteLine("Enter movie name:");
    movies[i] = Console.ReadLine(); // you always add the value
    if(movies[i] == "Exit" || movies[i] == "exit") 
    {
      break;
    }
}
for (i = 0; i < num1; i++) // there is no condition to stop the iteration.
  Console.WriteLine("Movie {0} is {1}", i + 1, movies[i]);

為了解決打印問題,我們可以添加一個索引,該索引只有在輸入電影時才會增加。 或者您可以使用列表或數組,然后使用 foreach 循環進行迭代。 另一種解決方案是保留數組但將其轉換為打印任務列表的可能性。

Console.WriteLine("Enter number of movies:");
int num1 = int.Parse(Console.ReadLine());
string[] movies = new string[num1];
int enteredMovies = 0;

for (i = 0; i < num1; i++)
{
    Console.WriteLine("Enter movie name:");
    string movie = Console.ReadLine(); 

    if(movie.Equals("exit", StringComparison.OrdinalIgnoreCase)
    {
       break;
    }
    else
    {
       movies[i] = movie;
       enteredMovies++;

    }

}

for (i = 0; i < enteredMovies; i++)
{
    Console.WriteLine("Movie {0} is {1}", i + 1, movies[i]);
}

或者您可以使用我提到的列表。

使用List<T>可能比使用數組更容易,除非分配特別需要使用 arrays。 這將使用如下:

  1. 閱讀電影數量
  2. 創建電影列表
  3. 循環電影的數量
    1. 從控制台讀取一行並存儲在一個臨時變量中
    2. 檢查臨時變量是否等於退出
    3. 要么將臨時變量添加到電影列表中,要么打破循環
  4. 現在電影列表應該包含所有輸入的電影,不多也不少。

你有幾個問題:

  • 您首先輸入數據,然后檢查它。
  • 您需要將輸入轉換為小寫,這樣無論用戶輸入exit, Exit, EXIT, ExIt您的程序都會終止。

您的代碼可以改進,但由於您是初學者並且可能不知道高級的東西,我將保持原樣:

using System;

public class Test
{ 

    public static void Main(String[] args)
    {
        Console.WriteLine("Enter number of movies:");
        int num1 = int.Parse(Console.ReadLine());
        string[] movies = new string[num1];

        for (int i = 0; i < num1; i++)
        {
            Console.WriteLine("Enter movie name:");
            String movie = Console.ReadLine();
            if (movie.ToLower() == "exit")
                break;
            else
                movies[i] = movie;
        }
        for (int i = 0; i < num1; i++)
            Console.WriteLine("Movie {0} is {1}", i + 1, movies[i]);
    }
}

謝謝大家的關注。 這是一個不錯的社區。

我對每個答案都做了一點,並設法解決了這個問題。 我可以學到很多東西。

謝謝你

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM