Программирование умножения массива C # - PullRequest
0 голосов
/ 14 марта 2012

У меня есть функция, которая принимает строку и возвращает строку.В ней я преобразую строку в массив целых чисел, а затем пытаюсь умножить все остальные числа следующим образом:

private string addEveryOther(string x) 
{    
    int[] d = x.Select(n => Convert.ToInt32(n)).ToArray();

    for(int i = 0; i < 10; i++)
    {
        d[i] = d[i] * 2;
        MessageBox.Show(d[i].ToString()); //Display the result? 
        i++;
    }

    // And later returning a string:
    StringBuilder g = new StringBuilder();
    foreach (int n in d)
    {
        g.Append(Convert.ToChar(n));
    }

    return g.ToString();
}

Это работает с добавлением, но не с умножением, поскольку возвращает странные значения.Если я введу «3434343434», я ожидаю, что он вернет «6464646464».Теперь он возвращает: "f4f4f4f4f4", и я не знаю почему?Любые предложения, как это сделать?

Ответы [ 4 ]

0 голосов
/ 14 марта 2012

Когда вы используете

 Convert.ToInt32(n.ToString())

Существует избыточное преобразование. Я думаю, что самый простой способ это

var d = x.Select(n => Char.IsDigit(n) ? n - '0' : 0).ToArray();
0 голосов
/ 14 марта 2012

Как я уже писал в комментарии Convert.ToInt32 (char)

Преобразует значение указанного символа Unicode в эквивалентное 32-разрядное целое число со знаком.

Таким образом, при преобразовании «0» результат будет 48, когда «1» результат 50 и так далее.

Вот измененный код:

private string addEveryOther(string x)
{
    //1. Convert string to int, not char to int
    int[] d = x.Select(n => Convert.ToInt32(n.ToString())).ToArray();

    //2. start from second number
    for (int i = 1; i < 10; i++)
    {
        d[i] = d[i] * 2;
        MessageBox.Show(d[i].ToString()); //Display the result? 
        i++;
    }
    string s = d.ToString();
    // And later returning a string:
    StringBuilder g = new StringBuilder();
    foreach (int n in d)
    {
        //3. Convert int to string, not to char
        g.Append(n.ToString());
    }

    return g.ToString();
}
0 голосов
/ 14 марта 2012

Попробуйте:

    int[] d = x.Select(n => int.Parse(n.ToString())).ToArray();      
    for(int i = 0; i < 10; i++)     
    {         
        d[i] = (i%2 == 0? d[i] * 2 : d[i]);
    }      
    StringBuilder g = new StringBuilder();     
    foreach (int n in d)    
    {         
        g.Append(n);    
    }      
    return g.ToString(); 

надеюсь, это поможет

0 голосов
/ 14 марта 2012

Исходя из приведенных выше обсуждений, я полагаю, что ваш метод должен использовать ToString вместо Convert.ToChar.

private string addEveryOther(string x) 
{    
  int[] d = x.Select(n => Convert.ToInt32(n.ToString())).ToArray();

  for(int i = 0; i < d.Length; i += 2)
  {
    d[i] = d[i] * 2;
    MessageBox.Show(d[i].ToString()); //Display the result? 
  }

  // And later returning a string:
  return String.Concat(d.Select(n => n.ToString()));
}

РЕДАКТИРОВАТЬ: использование решения @ Кирилла Concat и комментария @Reniuz в методе addEveryOther, мы надеемся, решитпроблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...