数组C#的初学者

时间:2019-02-01 19:02:57

标签: c# arrays

我不太了解数组,我需要创建“歌曲数组”类型的变量,然后将其初始化为新的数组,以便它可以存储4个对Songs的引用。然后我该如何创建一个循环,该循环将运行足够的时间来填充数组,同时调用InputSOngDetails()方法并在该方法中存储返回值?

namespace Songs
{
    class Program
    {
        static void Main(string[] args) {
            InputSongDetails();
        }

        static Song InputSongDetails()
        {
            Console.WriteLine("What is the name of your song");
            string name = Console.ReadLine();

            Console.WriteLine("What is the artists name");
            string artist = Console.ReadLine();

            int records;
            Console.WriteLine("How many records did it sell");
            while (!int.TryParse(Console.ReadLine(), out records) || records < 0)
            {
                Console.WriteLine("That is not valid please enter a number");
            }
            return new Song(name, artist, records);
        }
    }
}

如果需要,这是我的歌曲课程

namespace Songs
{
    class Song
    {
        string name;
        string artist;
        int copiesSold;

        public Song(string name, string artist, int copiesSold)
        {
            this.name = name;
            this.artist = artist;
            this.copiesSold = copiesSold;
        }

        public Song()
        {
        }

        public string GetArtist()
        {
            return artist;
        }

        public string GetDetails()
        {
            return $"Name: {name} Artist: {artist} Copies Sold: {copiesSold},";
        }

        public string GetCertification()
        {
            if (copiesSold<200000)
            {
                return null;
            }
            if (copiesSold<400000)
            {
                return "Silver";
            }
            if (copiesSold<600000)
            {
                return "gold";
            }
            return "Platinum";  
        }
    }
}

2 个答案:

答案 0 :(得分:4)

拳,初始化与.car,则一个简单的for的歌曲阵列 - 环就足够了。

new Song[ length ]

或者如评论者所建议的,只需使用可变长度的List<Song>

static void Main(string[] args) 
{
    Song[] songs = new Song[4];
    for(int i = 0; i < songs.Length; i++) 
    {
        songs[i] = InputSongDetails();
    }
}

一旦你掌握了基本知识,你也可以用一点的LINQ做到这一点(虽然我不会真的在这种情况下推荐它):

static void Main(string[] args) 
{
    List<Song> songs = new List<Song>();
    for(int i = 0; i < 4; i++) 
    {
        songs.Add(InputSongDetails());
    }
}

答案 1 :(得分:1)

这实际上不是一个答案,而只是在控制台应用程序中从用户那里获取输入的提示,这可能对您有用(嗯,答案在最后一个代码段中,但是pswg已经涵盖了该提示)很好)。

由于交互式控制台会话通常以很多Console.WriteLine("Ask the user a question"); string input = Console.ReadLine();结尾,并且,正如您已经做得很好,在某些情况下,请对输入内容进行一些验证,因此我发现编写起来很方便下面的方法。

他们每个人都接受string(这是提示用户(问题)的提示),并返回代表他们输入的强类型变量。验证(需要时)全部在该方法的循环中完成(如您所完成的):

private static ConsoleKeyInfo GetKeyFromUser(string prompt)
{
    Console.Write(prompt);
    var key = Console.ReadKey();
    Console.WriteLine();
    return key;
}

private static string GetStringFromUser(string prompt)
{
    Console.Write(prompt);
    return Console.ReadLine();
}

public static int GetIntFromUser(string prompt = null)
{
    int input;
    int row = Console.CursorTop;
    int promptLength = prompt?.Length ?? 0;

    do
    {
        Console.SetCursorPosition(0, row);
        Console.Write(prompt + new string(' ', Console.WindowWidth - promptLength - 1));
        Console.CursorLeft = promptLength;
    } while (!int.TryParse(Console.ReadLine(), out input));

    return input;
}

有了这些方法,输入就很简单:

string name = GetStringFromUser("Enter your name: ");
int age = GetIntFromUser("Enter your age: ");

这使得编写方法来从用户那里获得Song变得容易得多

private static Song GetSongFromUser()
{
    return new Song(
        GetStringFromUser("Enter song name: "),
        GetStringFromUser("Enter Artist name: "),
        GetIntFromUser("Enter number of copies sold: "));
}

所以现在我们的主要方法看起来像(这是您问题的答案):

private static void Main()
{
    var songs = new Song[4];

    for (int i = 0; i < songs.Length; i++)
    {
        songs[i] = GetSongFromUser();
    }

    Console.WriteLine("\nYou've entered the following songs: ");

    foreach (Song song in songs)
    {
        Console.WriteLine(song.GetDetails());
    }

    GetKeyFromUser("\nDone! Press any key to exit...");
}

此外,here是改进Song类的一些建议。