У меня есть массив из шести элементов (структур, которые представляют вещь):
thing[] = new thing{thing1,thing2,thing3,thing4,thing5,thing6};
У меня есть другая переменная, которую я использую для переключателя.Это говорит мне, какая «вещь» должна быть на первой позиции.
ENUM positionDesignation {first=0,second=1 ...sixth=5}
//declared a little different.
Когда пользователь выбирает другую позицию, скажем, 3, тогда «вещи» должны быть отсортированы по:
thing3
thing4
thing5
thing1
thing2
Я понял это.Проблема в том, что каждая «вещь» также имеет свойство status
.Если status
равно broken
, то мне нужно нажать его до конца и настроить.
Пример: thing4
равно broken
и thing1
равно first
thing = {
thing1.first,
thing2.second,
thing3.third,
thing4.sixth,
thing5.fourth,
thing6.fifth
};
Имеет ли это смысл?
Мой первый порядок выглядит так:
public void setRotationOrder() {
Thing[] things = {
getThing1(),
getThing2(),
getThing3(),
getThing4(),
getThing5(),
getThing6()
};
int[] wheel = new int[6];
int idx = getPrimary().getOrdinal();
idx = (idx == 0) ? 5 : idx - 1;
for (int i = 5; i >= 0; i--) {
wheel[idx] = i;
Thing[i].setState(Rotation6Designation.make(idx));
idx = (idx == 0) ? 5 : idx - 1;
}
}
Вторая часть выглядит следующим образом:
int lastIndex = 5;
int cnt = 0;
int thingPos = 0;
for (int i=5;i>=0;i--) {
// Check thing at idx. If out of service, put it at the end.
thingPos = wheel[i];
if (things[thingPos].getStatus().equals(AlarmShutdown) ||
things[thingPos].getStatus().equals(MaintenanceShutdown)) {
if (i == lastIndex) {
things[thingPos].setState(Rotation6Designation.make(lastIndex));
lastIndex--;
continue;
}
int tmpThingPos = thingPos;
thingPos++;
while (true) {
things[thingPos].setState(things[thingPos + 1].getState());
thingPos++;
if (thingPos == lastIndex) {
things[thingPos].setState(Rotation6Designation.make(tmpThingPos));
}
lastIndex--;
break;
}
}
}