【问题标题】:Can you replace ints in int Arrays?你可以替换 int Arrays 中的 int 吗?
【发布时间】:2022-01-25 21:13:11
【问题描述】:

我正在寻找一种方法,将数组中大于 9 的每个 int 替换为数字的总和。我将在下面演示一个示例。

我有这个数组:

int[] ints2 = new int[] { ints[0] * 2, ints[1], ints[2] * 2, ints[3], ints[4] * 2, ints[5], ints[6] * 2, ints[7], ints[8] * 2, ints[9]}; 

我想将第一个 int 替换为两位数的总和。 假设 ints[0] = 9。而 ints[0]*2 = 18。总和应该是 1+8 = 9。

我可以对整数使用某种替换方法吗?或者你们对如何处理这个问题有更好的想法?

我是这样尝试的,但显然我错了:

foreach (int number in ints)
            {
                int newNumberInt;
                
                if (number > 9)
                {
                    string newNum = number.ToString();
                    char[] charNum = newNum.ToCharArray();
                    int[] intNum = Array.ConvertAll(charNum, n => (int)Char.GetNumericValue(n));
                    newNumberInt = intNum[0] + intNum[1];                   
                }
                
                newNumberInt = number;
                 
            }

【问题讨论】:

  • 你应该采取更小的步骤。编写一个函数,它接受一个 int 并将它的数字之和作为 int 返回。 然后测试它直到它工作。。然后取一个数组并将特定数字替换为零。 测试它直到它起作用。然后用您之前测试的功能切换零部分替换。 测试它直到它起作用。你现在正试图吃对你来说太大的食物。更小的步骤。
  • ints2 有什么关系?它没有在您的代码中使用
  • ints2 应该只是整数,因为我运行了一个测试!
  • 如果你有 999 会怎样?应该先变成 27 再变成 9 吗?
  • 你想对负数做什么? -999;结局如何?

标签: c# arrays integer


【解决方案1】:

你很接近。您的错误是不正确地添加数字,以及未能替换数组中的值。这是一种将整数中所有数字相加的单行方法(使用System.Linq):

    //Adds up all the digits in a number
    private static int AddDigits(int number) => number.ToString().Sum(digitCharacter => int.Parse(digitCharacter.ToString()));

对于替换值,直接在数组上的 foreach 循环将不起作用,因为在枚举期间更改了数组的内容。一个简单的解决方案是使用for 循环。

        for (int i = 0; i < ints.Length; i++)
        {
            var value = ints[i];
            ints[i] = value > 9 ? AddDigits(value) : value;
        }

注意:我写的 AddDigits 函数只适用于正整数

【讨论】:

  • 无需字符串和解析字符,只需将0 去掉即可。 "72".Sum(c =&gt; c - '0')
  • @CaiusJard 聪明。但是当整数为负数时,我宁愿抛出异常也不愿返回一些奇怪的数字
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-16
相关资源
最近更新 更多