Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2018, 15:38   #1
Мaкс
Форумчанин
 
Регистрация: 12.06.2018
Сообщений: 831
По умолчанию Разборка ++.

Добрый день, форумчане, у меня вопрос: если в цикле for срабатывает оператор i++, то +1 будет к значению i только когда, когда закончиться цикл, не весь цикл, а только } . Про который цикл я только что говорил он на 63-ей строке.

Код программы:

Код:
using System;
class FailSoftArray {
    int[] a; // ссылка на базовый массив
             // Построить массив по заданному размеру.
    public FailSoftArray(int size)
    {
        a = new int[size];
        Length = size;
    }
    // Автоматически реализуемое и доступное только для чтения свойство Length.
    public int Length
    {
        get; private set;
    }
    // Автоматически реализуемое и доступное только для чтения свойство Error.
    public bool Error
    {
        get; private set;
    }
    // Это индексатор для массива FailSoftArray.
    public int this[int index]
    {
        // Это аксессор get.
        get
    {
        if (ok(index))
            {
                Error = false;
                return a[index];
            }
            else
            {
                Error = true;
                return 0;
            }
        }
        // Это аксессор set.
        set
        {
            if (ok(index))
            {
                a[index] = value;
                Error = false;
            }
            else Error = true;
        }
    }
    // Возвратить логическое значение true, если
    // индекс находится в установленных границах.
    private bool ok(int index)
    {
        if (index >= 0 & index < Length) return true;
        return false;
    }
}
// Продемонстрировать применение усовершенствованного
// отказоустойчивого массива.
class FinalFSDemo {
    static void Main()
    {
        FailSoftArray fs = new FailSoftArray(5);
        // Использовать свойство Error.
        for (int i = 0; i < fs.Length + 1; i++)
        {
            fs[i] = i * 10;
            Console.WriteLine(fs[i]);
            if (fs.Error)
                Console.WriteLine("Ошибка в индексе " + i);
        }
        Console.ReadKey();
    }
}
Мaкс вне форума Ответить с цитированием
Старый 19.06.2018, 16:56   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Мaкс Посмотреть сообщение
, то +1 будет к значению i только когда, когда закончиться цикл, не весь цикл, а только }
Вы сами себя пытаетесь запутать.

Цитата:
Код:
FailSoftArray fs = new FailSoftArray(5);
        // Использовать свойство Error.
        for (int i = 0; i < fs.Length + 1; i++)
fs.Length равно 5, т.е. имеем цикл
Код:
        for (int i = 0; i < 6; i++)
получаем первое вхождение в цикл, i=0, условие цикла выполняется (0<6)
поэтому цикл выполнится. по завершению тела цикла выполнится команда i++
i станет равно 1, условие цикла выполняется (1<6), поэтому цикл выполнится, потом i++
i станет равно 2, условие цикла выполняется (2<6), поэтому цикл выполнится, потом i++
...
i станет равно 5, условие цикла выполняется (5<6), поэтому цикл выполнится, потом i++
i станет равно 6, условие цикла не выполняется (6<6), поэтому цикл завершится.
всё.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.06.2018, 11:00   #3
Мaкс
Форумчанин
 
Регистрация: 12.06.2018
Сообщений: 831
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Вы сами себя пытаетесь запутать.

Цитата:
Код:

FailSoftArray fs = new FailSoftArray(5);
// Использовать свойство Error.
for (int i = 0; i < fs.Length + 1; i++)

fs.Length равно 5, т.е. имеем цикл
Код:

for (int i = 0; i < 6; i++)

получаем первое вхождение в цикл, i=0, условие цикла выполняется (0<6)
поэтому цикл выполнится. по завершению тела цикла выполнится команда i++
i станет равно 1, условие цикла выполняется (1<6), поэтому цикл выполнится, потом i++
i станет равно 2, условие цикла выполняется (2<6), поэтому цикл выполнится, потом i++
...
i станет равно 5, условие цикла выполняется (5<6), поэтому цикл выполнится, потом i++
i станет равно 6, условие цикла не выполняется (6<6), поэтому цикл завершится.
всё.
Это я же понял, а i++ означает то что прибавится не сразу, а когда ещё раз пройдётся по i++? А ++i означает что сразу прибавиться +1 к i? (i переменная типа int)
Мaкс вне форума Ответить с цитированием
Старый 20.06.2018, 11:08   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Мaкс Посмотреть сообщение
Это я же понял, а i++ означает то что прибавится не сразу, а когда ещё раз пройдётся по i++? А ++i означает что сразу прибавиться +1 к i? (i переменная типа int)
Вы не совсем правильно поняли.
Вы разберите два примера кода.
Первый:
Код:
int i =0;
Console.WriteLine("  i  = {0}", i++);
Console.WriteLine("  i  = {0}", i);
Код:
int i =0;
Console.WriteLine("  i  = {0}", ++i);
Console.WriteLine("  i  = {0}", i);
и всё поймёте.

++i - к содержимому i прибавим 1 и то, что получилось вернём.
i++ - вернём содержимое i, а уже потом к содержимому i прибавим 1
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.06.2018, 11:46   #5
Мaкс
Форумчанин
 
Регистрация: 12.06.2018
Сообщений: 831
По умолчанию

Спасибо, Serge_Bliznykov.
Мaкс вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разборка кода RelaX Inc. Паскаль, Turbo Pascal, PascalABC.NET 4 25.04.2013 09:45
XML разборка Gudzik11 Общие вопросы Delphi 2 28.11.2011 19:22
DOM разборка тегов Rionty Общие вопросы Delphi 0 14.03.2010 16:56
Разборка телевизора mutabor Компьютерное железо 5 11.02.2010 17:06
Разборка кода Safary Помощь студентам 8 28.11.2008 09:18