我不太了解数组,我需要创建“歌曲数组”类型的变量,然后将其初始化为新的数组,以便它可以存储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";
}
}
}
答案 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
类的一些建议。