Переключить элементы case в массиве, чтобы «создать» цикл | C # - PullRequest
0 голосов
/ 03 ноября 2018

Я хочу иметь возможность переключаться между «активным» объектом в массиве по его индексу. Для этого мне нужно иметь возможность «циклически» проходить через массив объектов с фиксированной длиной 3.

Когда активным объектом вызывается первый элемент и функция switchObject (), я хочу иметь возможность заменить активный объект вторым элементом в массиве. Это возможно?

Inventory inventory = new Inventory(); /* has getObject() */
internal Object activeObject;

public void switchObject()
    {
        switch (index)
        {
            /* If active object index is 0, switch active object index to index 1 */
            case 0:
                index = 1;
                activeObject = inventory.getObject(index);

            /* If active object index is 1, switch active object index to index 2 */
            case 1:
                index = 2;
                activeObject = inventory.getObject(index);

            /* If active object index is 2, switch active object index to index 0 */
            case 2:
                index = 0;
                activeObject = inventory.getObject(index);

        }
    }

Желательным поведением будет циклический массив, например (где -> переключатель ()) элемент 1 -> элемент 2 -> элемент 3 -> элемент 1 -> элемент 2 -> элемент 3 -> элемент 1 ....

Этот код выдает ошибки в VS2017, так как "управление не может быть пропущено из одной метки регистра ('case;')

Кроме того, есть ли способ, которым я могу использовать исключения (возможно, пользовательское исключение?), Чтобы проверить, есть ли на самом деле три объекта, доступных для переключения между ними?

Спасибо!

Есть ли способ заставить это работать?

1 Ответ

0 голосов
/ 03 ноября 2018

Вы пропускаете оператор break; в конце каждого case. И вы можете добавить регистр default, который вы можете использовать, чтобы вызвать исключение, если индекс не находится между 1-3.

switch (index)
    {
        /* If active object index is 0, switch active object index to index 1 */
        case 0:
            index = 1;
            activeObject = inventory.getObject(index);
            break;

        /* If active object index is 1, switch active object index to index 2 */
        case 1:
            index = 2;
            activeObject = inventory.getObject(index);
            break;

        /* If active object index is 2, switch active object index to index 0 */
        case 2:
            index = 0;
            activeObject = inventory.getObject(index);
            break;
        default:
            throw new Exception("Index can only be 1, 2 or 3");
    }

Примечание: раздел default не нуждается в операторе break, так как выброшенное исключение разрывается до потока switch.

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

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