Anton
Anton

Reputation: 21

Can you replace ints in int Arrays?

I'm looking for a way to replace every int that is greater than 9 in an array with the sum of the digits. I'm gonna demonstrate an example below.

I have this array:

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]}; 

And I want to replace the first int to whatever the sum is of the two digits. Lets say ints[0] = 9. And ints[0]*2 = 18. The sum should be 1+8 = 9.

Can I use some kind of replace method for ints? Or do you guys have any better ideas of how to deal with this issue?

I tried it like this, but obviously I'm wrong:

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;
                 
            }

Upvotes: 1

Views: 586

Answers (1)

Nigel
Nigel

Reputation: 3311

You are close. Your mistakes are an incorrect addition of digits, and failure to replace the values in the array. Here is a one line method that adds all the digits in an integer (using System.Linq):

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

For replacing the values, a foreach loop directly on the array won't work, due to changing the contents of the array during enumeration. A simple solution is to use a for loop.

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

Note: the AddDigits function I wrote only works for positive integers

Upvotes: 1

Related Questions