@PurgaBot

Заполнить по порядку цифры и символы с помощью стат. метода(с 1ого аргумента заканчивая 2ым аргументом). Почему в коде не раб. nums[k]=nums[k-1]++;?

Нужно заполнить по порядку цифры и символы с помощью статического метода с первого аргумента заканчивая вторым аргументом. Почему в коде не работает (nums[k]=nums[k-1]++;), но работает (nums[k]=nums[k-1]+1;)

Вот код:
static int[] zuma(int a, int b)
        {
            int[] nums = new int[b-a+1];
            nums[0] = a;
            for (int k = 1; k<nums.Length-1;k++)
            {
                nums[k]=nums[k-1]+1;
            }
            nums[nums.Length - 1] = b;
            return nums;
        }
        static char[] zuma(char a, char b)
        {
            int q = b-a; 
            char[] nums = new char[q+1];
            nums[0] = a;
            for (int k = 1; k < nums.Length-1; k++)
            {
                nums[k] = (char)(nums[k - 1]+1);
            }
            nums[nums.Length - 1] = b;
            return nums;
        }
        static void Main()
        {
            int[] A;
            char[] B;
            A = zuma(3, 8);
            B = zuma('B', 'F');
            for (int k = 0; k<A.Length;k++)
            {
                Console.Write(A[k]+" ");
            }
            Console.WriteLine();
            for (int k = 0; k < B.Length; k++)
            {
                Console.Write(B[k] + " ");
            }
            Console.ReadKey();
        }
  • Вопрос задан
  • 43 просмотра
Пригласить эксперта
Ответы на вопрос 1
vabka
@vabka Куратор тега C#
Токсичный шарпист
Что-то какой-то ужасно страшный код у вас.
Код вполне работает (в консоль выводится 345678 и bcdef)

Мой вариант кода

1. Нормально именуем сущности в коде.
2. Убираем лишний код.
3. Добавляем проверку входных аргументов
using System;

var intArray = CreateArrayFromIntRange(3, 8);
var charArray = CreateArrayFromCharRange('B', 'F');

Console.WriteLine(string.Join(' ', intArray));
Console.WriteLine(string.Join(' ', charArray));

static int[] CreateArrayFromIntRange(int start, int end)
{
    if(start > end)
        throw new ArgumentException("start must be less or equal to end");

    var length = end - start + 1;
    var buffer = new int[length];

    var current = start;
    for (var i = 0; i < buffer.Length; i++)    
        buffer[i] = current++;

    return buffer;
}

static char[] CreateArrayFromCharRange(char start, char end)
{
    if(start > end)
        throw new ArgumentException("start must be less or equal to end");
    
    var length = end - start + 1;
    var buffer = new char[length];
    
    var current = start;    
    for (var i = 0; i < buffer.Length; i++)    
        buffer[i] = current++;
    
    return buffer;
}


nums[k]=nums[k-1]++ Будет работать не так, как вы ожидаете - Индексация массивов происходит по ссылке, а не по значению. Например с List такого не будет, тк там индексатор - это метод, которы возвращает значение по индексу, а не ссылку на элемент.
PS: Если это задание в школе/колледже/универе, то сначала разберитесь в том коде, который я написал, прежде чем его копировать
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы