从Console.WriteLine说起

      今天在输出一个Console.WriteLine("{0:A}",item)中怎么也输不出书中的结果,其中A是自定义的格式,item是一个普通的类。至于为什么输错后面再讲。
      然后随即想Console.WriteLine()是怎么输出结果,它在后台是调用什么方法的?这些看似越开始学的东西好像越难。

      1.查看System.Console类的WriteLine方法

      用Reflector软件查看mscorlib组件,查下面的Console类,代码如下:

     

      2.看代码中的Out,它其实是System.IO命名空间下的TextWriter类

      然后再调用这个类下的WriteLine方法,具体代码如下:

            

      然后再转到了String类下的string.Format方法,代码如下:

     

      原来建立字符串的过程,需要StringBuilder实例,实例刚开始是用字符串的第一部分初始化,然后调用StringBuilder.AppendFormat()方法,传递到第一个格式说明符{0:A}和相应的对象item。这个方法需要指出如何格式化对象,它首先检查对象,确定它是否执行System命名空间中的借口IFormattable(其实错误就是接口继承错了)。若没有,这个方法只会调用对象的ToString()方法。若后面还有其他的字符串,继续循环StringBuilder.AppendFormat()方法。

using System; using System.Collections.Generic; public class PlaylistApp { public static void Main(string[] args) { LinkedList<string> playlist = new LinkedList<string>(); Stack<string> history = new Stack<string>(); Scanner scanner = new Scanner(System.in); while (true) { Console.WriteLine("Choose an option:"); Console.WriteLine("1. Add a song to your playlist"); Console.WriteLine("2. Play the next song in your playlist"); Console.WriteLine("3. Skip the next song"); Console.WriteLine("4. Rewind one song"); Console.WriteLine("5. Exit"); string input = scanner.nextLine(); if (input.Equals("1")) { Console.WriteLine("Enter Song Name:"); string song = scanner.nextLine(); playlist.AddLast(song); Console.WriteLine(""" + song + "" added to your playlist."); } else if (input.Equals("2")) { if (playlist.Count > 0) { string song = playlist.RemoveFirst(); history.Push(song); Console.WriteLine("Now playing "" + song + """); if (playlist.Count > 0) { Console.WriteLine("Next song: "" + playlist.First.Value + """); } else { Console.WriteLine("Next song: none queued"); } } else { Console.WriteLine("Your playlist is empty."); } } else if (input.Equals("3")) { if (playlist.Count > 0) { string song = playlist.RemoveFirst(); Console.WriteLine("Skipped "" + song + """); if (playlist.Count > 0) { Console.WriteLine("Next song: "" + playlist.First.Value + """); } else { Console.WriteLine("Next song: none queued"); } } else { Console.WriteLine("Your playlist is empty."); } } else if (input.Equals("4")) { if (history.Count > 0) { string song = history.Pop(); //JAVA TO C# CONVERTER TASK: There is no .NET LinkedList equivalent to the 2-parameter Java 'add' method: playlist.add(0, song); Console.WriteLine("Rewound to "" + song + """); if (playlist.Count > 0) { Console.WriteLine("Next song: "" + playlist.First.Value + """); } else { Console.WriteLine("Next song: none queued"); } } else { Console.WriteLine("You haven't played any songs yet."); } } else if (input.Equals("5")) { Console.WriteLine("Goodbye!"); break; } else { Console.WriteLine("Invalid input."); } } scanner.close(); } } 修改代码
06-10
这段代码是C#语言编写的一个控制台应用程序,实现了一个简单的音乐播放器的功能。以下是修改后的代码: ``` using System; using System.Collections.Generic; public class PlaylistApp { public static void Main(string[] args) { LinkedList<string> playlist = new LinkedList<string>(); Stack<string> history = new Stack<string>(); while (true) { Console.WriteLine("Choose an option:"); Console.WriteLine("1. Add a song to your playlist"); Console.WriteLine("2. Play the next song in your playlist"); Console.WriteLine("3. Skip the next song"); Console.WriteLine("4. Rewind one song"); Console.WriteLine("5. Exit"); string input = Console.ReadLine(); if (input.Equals("1")) { Console.WriteLine("Enter Song Name:"); string song = Console.ReadLine(); playlist.AddLast(song); Console.WriteLine($"{song} added to your playlist."); } else if (input.Equals("2")) { if (playlist.Count > 0) { string song = playlist.First.Value; playlist.RemoveFirst(); history.Push(song); Console.WriteLine($"Now playing {song}"); if (playlist.Count > 0) { Console.WriteLine($"Next song: {playlist.First.Value}"); } else { Console.WriteLine("Next song: none queued"); } } else { Console.WriteLine("Your playlist is empty."); } } else if (input.Equals("3")) { if (playlist.Count > 0) { string song = playlist.First.Value; playlist.RemoveFirst(); Console.WriteLine($"Skipped {song}"); if (playlist.Count > 0) { Console.WriteLine($"Next song: {playlist.First.Value}"); } else { Console.WriteLine("Next song: none queued"); } } else { Console.WriteLine("Your playlist is empty."); } } else if (input.Equals("4")) { if (history.Count > 0) { string song = history.Pop(); playlist.AddFirst(song); Console.WriteLine($"Rewound to {song}"); if (playlist.Count > 0) { Console.WriteLine($"Next song: {playlist.First.Value}"); } else { Console.WriteLine("Next song: none queued"); } } else { Console.WriteLine("You haven't played any songs yet."); } } else if (input.Equals("5")) { Console.WriteLine("Goodbye!"); break; } else { Console.WriteLine("Invalid input."); } } } } ``` 主要的修改包括: 1. 移除了 `Scanner` 对象,改用 `Console.ReadLine()` 方法读取用户输入。 2. 修改了字符串的格式化方式,使用了字符串插值(interpolation)的方式。 3. 修改了 `LinkedList` 的 `add` 方法,改用了 `AddFirst` 方法。 4. 修改了变量的命名方式,采用了 `camelCase` 的命名规范。 5. 修改了部分字符串的拼接方式,改用了字符串插值的方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值