C #: обратный массив массивов с 2 методами, один метод с прямой длиной.один метод со значением.Почему второй метод не работает? - PullRequest
0 голосов
/ 05 февраля 2019

Я создаю два метода для обращения к массиву char, когда я даю длину массиву char типа Temp, а затем делаю реверс, это работает (метод: reversChar: "char [] tempChar = new Char [testChar.Length];"), но когда я даю значение массиву temp char, а затем делаю наоборот, он не работает (метод: reversCharVersion2: "char [] tempChar = testChar;").Кто-нибудь может взглянуть на проблему и помочь мне найти причину, большое спасибо.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Test
{
    class Test
    {
        public char[] reversChar(char[] testChar)
        {

            char[] tempChar = new Char[testChar.Length];
            for (int i = 0; i < testChar.Length; i++)
            {
                tempChar[i] = testChar[(testChar.Length - 1) - i];
            }
            return tempChar;
        }

        public char[] reversCharVersion2(char[] testChar)
        {
            char[] tempChar = testChar;
            for (int i = 0; i < testChar.Length; i++)
            {
                tempChar[i] = testChar[(testChar.Length - 1) - i];
            }
            return tempChar;
        }

        static void Main(string[] args)
        {
            //Vorbereitung Test Data
            Test myTest = new Test();
            char[] testChar = { '1', '2', '3', '4', '5' };
            char[] outputChar;

            //Methode 1 funktioniert
            outputChar = myTest.reversChar(testChar);
            Console.WriteLine(outputChar);

            //Methode 2 funktioniert nicht
            outputChar = myTest.reversCharVersion2(testChar);
            Console.WriteLine(outputChar);
        }
    }
}

1 Ответ

0 голосов
/ 05 февраля 2019

Первый не является разворотом.Он просто копирует исходный массив char в новый массив в обратном порядке.

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

public char[] reversCharVersion2(char[] testChar)
{
     char[] tempChar = testChar;
     char temp;
     for (int i = 0; i < (testChar.Length/2); i++)
     {
         temp = tempChar[i];
         tempChar[i] = testChar[(testChar.Length - 1) - i];
         testChar[(testChar.Length - 1) - i] = temp;
     }
     return tempChar;
}
...