我有
Console.WriteLine("\n");
Console.WriteLine("Press any key to continue...");
我正在尝试使其与以下代码一起使用。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
List<string> details = new List<string>();
Console.Write("Enter First Name: ");
details.Add(Console.ReadLine());
Console.Write("Enter Last Name: ");
details.Add(Console.ReadLine());
Console.Write("Enter Street: ");
details.Add(Console.ReadLine());
Console.Write("Enter City: ");
details.Add(Console.ReadLine());
Console.Write("Enter State: ");
details.Add(Console.ReadLine());
Console.Write("Enter Zip: ");
details.Add(Console.ReadLine());
Console.WriteLine("\n\nCustomer's Information:");
var result = from detail in details
let upperCaseWord = UppercaseWords(detail)
select upperCaseWord;
foreach (var item in result)
{
Console.WriteLine("{0}", item);
}
Console.ReadLine();
}
public static string UppercaseWords(string value)
{
char[] array = value.ToCharArray();
if (array.Length >= 1)
{
if (char.IsLower(array[0]))
{
array[0] = char.ToUpper(array[0]);
}
}
for (int i = 1; i < array.Length; i++)
{
if (array[i - 1] == ' ')
{
if (char.IsLower(array[i]))
{
array[i] = char.ToUpper(array[i]);
}
}
}
return new string(array);
}
}
}
无论我输入
Console.WriteLine("\n");
Console.WriteLine("Press any key to continue...");
它会导致错误或显示不正确(在单词之前,单词中间,但不是在应该显示的页面的最后)。我知道这似乎是一个简单的问题,但我感到非常困惑和迷茫。我似乎无法弄清楚我在这里做错了什么?任何帮助都将是美好的!
这是应该执行的作业:
创建字符串列表。
使用Console.ReadLine()收集firstName,lastName,街道,城市,州,邮政编码的值,并将其保存到列表中。
编写一个简单的Linq语句,调用方法UppercaseWords()将首字母更改为大写。
创建一个foreach语句以显示信息。
因此,我相信我可以使所有其他工作正常进行,但是我对为什么该程序最简单的部分无法正常工作感到困惑。
任何帮助将不胜感激。非常感谢!
答案 0 :(得分:-1)
自从您说过:“任何帮助,我们将不胜感激”,我想我将花一些时间来分享一些有关如何使您的程序更好的想法。我并不是说这是唯一的方法,甚至不是最好的方法,但希望它能给您一些思考和提高技能的机会。
作为程序员的目标之一是编写尽可能少的代码。这是您的一些代码重复执行相同的操作,只是稍作更改。
Console.Write("Enter First Name: ");
details.Add(Console.ReadLine());
Console.Write("Enter Last Name: ");
details.Add(Console.ReadLine());
通过消除所有重复的代码,我们可以做得更好:首先要注意的是,唯一的区别是您输入的数据的“名称”,因此将所有名称收集到一个地方:
//static - only 1 copy of this data is ever needed
//readonly - these values should never be changed
static readonly List<string> DataNames = new List<string>() { "First Name", "Last Name",
"Street", "City", "State", "Zip"};
现在编写一个可以输入值的函数:
static string ReadDataPairFromConsole( string DataName )
{
Console.Write("Enter {0}: ", DataName );
return Console.ReadLine();
}
现在所有数据都可以用一行输入:
DataNames.ForEach(name => details.Add(ReadDataPairFromConsole(name)));
由于每个单词都需要大写,因此代码可以遵循您编写的逻辑并处理整个输入列表。但是,也可以像这样输入时处理每个输入:
static string ReadDataPairFromConsole( string DataName )
{
Console.Write("Enter {0}: ", DataName );
return FirstLetterUpper(Console.ReadLine());
}
您还可以利用内置函数对单个单词执行FirstLetterUpper(有一些不检查的边缘情况):
var upWord = char.ToUpper(InputString[0]) + InputString.Substring(1);
我还要进行许多其他更改,例如使用对使输入标签与输入字符串匹配。然后,当输出数据时,就知道每块是什么。
祝您学习顺利!