【问题标题】:C# string to array from readline issue从readline问题到数组的C#字符串
【发布时间】:2019-09-28 14:28:29
【问题描述】:

我正在做一些 C# 练习,任务是检查 att swedish SSN 是发给女性还是男性。

算法检查第九个数字是否可以被 0 整除,那么它是女人还是男人。

如果我在字符串变量中使用硬编码的“nr”,则算法有效,但如果我尝试从 readline 语句中读取它,则会收到以下错误:

索引超出范围。必须是非负数且小于集合的大小。参数名称:startIndex

这是我正在使用的代码:

//string personnr = "860215-2097";
string personnr = "";
char[] arr;

public void CheckGender(string pnr)
{
    arr = personnr.ToCharArray(9, 1);

    if (personnr[9] %2 == 0)
    {
        Console.WriteLine($"Woman!!!");
    }
    else
    {
        Console.WriteLine($"Man!!!");
    }
}

public void PrintPersonNr()
{
    Console.WriteLine("Write a personnr in the format yymmdd-nnnn: ");
    string nr = Console.ReadLine();
    CheckGender(nr);
}

所以我猜我的 PrintPersonNr 方法不能正常工作..

谢谢

【问题讨论】:

  • 你没有检查,pnr 足够长。除此之外,您的代码只能靠运气工作,因为您不是在检查第 9 位是否可以被 2 消除,而是检查字符代码是否可以被 2 消除。

标签: c# arrays


【解决方案1】:

你可以试试这个:

public enum SSNGender
{
  Female,
  Male
}

class Program
{

  static public Dictionary<SSNGender, string> SSNGenderText
    = new Dictionary<SSNGender, string>()
  {
    { SSNGender.Female, "Woman" },
    { SSNGender.Male, "Man" },
  };

  static public SSNGender CheckSSNGender(string pnr)
  {
    // Here check the validity of the pnr (length, format...)
    return pnr[9] % 2 == 0 ? SSNGender.Female : SSNGender.Male;
  }

  static void Main(string[] args)
  {
    Console.WriteLine("Write a personnr in the format yymmdd-nnnn: ");
    string nr = Console.ReadLine();
    var result = CheckSSNGender(nr);
    Console.WriteLine(SSNGenderText[result]);
    Console.ReadKey();
  }

【讨论】:

  • 我还没有找到字典,但我确实理解代码,谢谢:)
【解决方案2】:

尝试以下:

        public void CheckGender(string pnr)
        {
            string arr = pnr.Substring(10, 1);

            if (arr == "0")
            {
                Console.WriteLine("Woman!!!");
            }
            else
            {
                Console.WriteLine("Man!!!");
            }
        }

【讨论】:

  • 发现:“瑞典社会安全号码的用法。性别由第三位数字表示,女性偶数,男性奇数。”
  • 是的,但那是在生日之后,所以如果我有一个分隔符字符为“-”,那么它应该是第九个字符。
  • @jdweng,这确实有效,但我必须用数组解决这个问题
  • 您确定作业中说需要使用 ARRAYS 进行检查吗?在 c# 中使用带有字符串的数组不是标准的。这就是微软创建方法 SubString() 的原因。
  • 将索引从 9 更改为 10。
【解决方案3】:

你需要做的是使用模运算符,然后检查这个数字是否可以被2整除,如果结果为零,那么它是偶数。

还有一个基本问题,您需要检查字符是否为数字。如果是,则需要完成操作,如果不是,则需要让用户知道。

我修改了JDWeng的帖子

public void CheckGender(string pnr)
{
    string arr = pnr.Substring(9, 1);
    int num =0;

    if (int.TryParse(arr, num))
    {
        if ((num % 2) == "0")
        {
            Console.WriteLine("Man!!!");
        }
        else
        {
            Console.WriteLine("Woman!!!");
        }
    }
    else
    {
        Console.WriteLine("Not a number!");
    }
}

祝你运动顺利!!!

【讨论】:

  • 谢谢,我收到两个错误,在 if 语句中,参数 2 必须使用 'out' 关键字传递 运算符 '==' 不能应用于 'int' 和 'string 类型的操作数'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 2020-10-01
  • 2020-11-05
  • 1970-01-01
  • 2011-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多