【问题标题】:String manipulation to create email address from first and last name at least 4 times字符串操作从名字和姓氏创建电子邮件地址至少 4 次
【发布时间】:2014-02-26 09:49:16
【问题描述】:

这个程序会给我错误信息:

使用未分配的变量 yourName 和未分配的变量 yourIsp。

如果我取出 for 循环,它将运行。我正在尝试向用户询问姓名和 isp 至少 4 次,并使用字符串操作从名字和姓氏创建电子邮件地址。

static void Main(string[] args)
{
    string yourName; string yourIsp;
    Console.WriteLine("Enter your full name:");
      for (int i = 0; i < 4; i++)            
    yourName = Console.ReadLine();

    Console.WriteLine("Enter your ISP:");
      for (int j = 0; j < 4; j++)
    yourIsp = Console.ReadLine();

    char[] separator = {' '};
    string[] yourWords;
    yourWords = yourName.Split(separator);
    string yourFirstName = yourWords[0];
    string yourLastName = yourWords[1];
    string yourEmailAddress = yourFirstName + yourLastName + "@" + yourIsp;
    yourEmailAddress = yourEmailAddress.ToLower();
    Console.WriteLine("Hello {0}, your email address is {1}", yourName, yourEmailAddress);
}   

【问题讨论】:

  • 我不明白你认为这应该做什么。它会询问您的全名,然后读取四行文本,每次都替换 yourName。所以它只会“记住”输入的最后一行。一旦你输入了四行文本,它就会为 ISP 做同样的事情。

标签: c# string email-address


【解决方案1】:

你必须给yourNameyourIsp默认值。

string yourName = "";
string yourIsp = "";

它不知道你的for 循环是否会运行(尽管你可以知道它们每个运行4 次)


想象一下,如果你的循环看起来像这样:

int number;

for (int i = 0; i < someList.Count(); i++)
    number = Math.Max(number, i.SomeValueInTheList);

Console.WriteLine("Largest value in list: {0}", number);

如果列表中没有元素,则循环永远不会运行,number 也不会被初始化。


将值存储在列表中,然后逐一显示。您覆盖的值,并丢失除最后一个输入值之外的所有值。

var names = new List<string>();
var isps = new List<string>();

string yourName; string yourIsp;
Console.WriteLine("Enter your full name:");
for (int i = 0; i < 4; i++)
    names.Add(Console.ReadLine());

Console.WriteLine("Enter your ISP:");
for (int j = 0; j < 4; j++)
    isps.Add(Console.ReadLine());

foreach (var sentence in names.Zip(isps, (name, isp) => string.Format("Hello {0}, your email address is {1}", name, string.Concat(name, "@", isp).ToLower())))
    Console.WriteLine(sentence);

【讨论】:

  • 谢谢。它确实有效,并要求我提供 4 个名称和 isp。但对于输出,它只给了我一个电子邮件地址。我的意思是,我输入名称和 isps:Jon Don、Ray Smith、Sam Dam、Rob Mob / hotmail.com、yahoo.com、gmail.com、live.com。它给了我输出,因为 Rob Mob 的电子邮件地址是 robmob@live.com。如何获取所有四个名称来创建电子邮件地址。
  • @Ralvarez 没问题。如果 StackOverflow 上的任何答案对您有帮助,请点赞和/或将最有帮助的标记为答案。它可以帮助将来遇到相同问题的任何人更快地找到帮助。
【解决方案2】:

现有答案描述了错误。我的帖子解决了我认为您可能一直在尝试做的事情:

for (int i = 0; i < 4; i++) {
    Console.WriteLine("Enter your full name:");
    string yourName =Console.ReadLine();

    Console.WriteLine("Enter your ISP:");
    string yourIsp = Console.ReadLine();

    char[] separator = {' '};
    string[] yourWords;
    yourWords = yourName.Split(separator);
    string yourFirstName = yourWords[0];
    string yourLastName = yourWords[1];
    string yourEmailAddress = yourFirstName + yourLastName + "@" + yourIsp;
    yourEmailAddress = yourEmailAddress.ToLower();
    Console.WriteLine("Hello {0}, your email address is {1}", yourName, yourEmailAddress);
}

【讨论】:

  • 谢谢稻田,这正是我想要做的。非常感谢。
【解决方案3】:

string yourName; string yourIsp; 更改为:

string yourName = null;
string yourIsp = null;

问题在于编译器无法安全地判断是否曾经为变量分配了值。虽然从代码中可以清楚地看出会有四次赋值,但这不是编译器能说的。因此,您必须显式地初始化变量。

【讨论】:

  • 现在说得通了。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-22
  • 1970-01-01
  • 2019-11-04
相关资源
最近更新 更多