У меня есть 9 имен, которые мне нужно отобразить в последовательности вращения. Как изображение:Логика сравнения не работает
Как вы можете видеть, имена идут на одну позицию вниз в списке, с 9-го имени принимая верх его на каждом повороте.
Переменная, которая управляет вращением, представляет собой целое число iName. Theres - метод, который просто считывает пользовательский ввод (сенсорное изображение) и добавляет или уменьшает значение iName. Он начинается с 0 (список отображается Adams в Ida), и когда пользователь дает команду, он принимает 1 (поэтому список отображается от Ida до Henry). На самом деле, пользователь может вернуться во времени и превратить iName с 5 на 4, поэтому список изменится с Easy-Denver на Frank-Easy.
У меня есть 9 TextViews делают эту работу, и он обновляется внутри цикла следующим образом:
int[] arrNames_Ids = {R.id.Name1, R.id.Name2, R.id.Name3, R.id.Name4, R.id.Name5, R.id.Name6, R.id.Name7, R.id.Name8, R.id.Name9};
String[] arrPeople = new String {"Adams","Boston","Chicago","Denver","Easy","Frank","George","Henry","Ida"}
String sAlternative_Name = "";
for (iCounter = 0; iCounter < 9; iCounter++){
// iName is a global variable, stars at 0, but it changes upon user request:
sName = arrPeople[iName];
// this "if" statement is the problematic piece of code.......
if (((iCounter == 1)||(iCounter == 3)||(iCounter == 5))&& (sName.equals("Adams")){
sAlternative_Name = mtAlternative_Name();
sName = sAlternative_Name;
} else {
if ((sAlternative_Name != "") && (sName.equals(sAlternative_Name))){
sName = "Adams";
}
}
// without the previous "if" the following part works properly, so the list rotates accordingly;
tvNames = (TextView) getView().findViewById(arrNames_Ids[iCounter]);
tvNames.setText(sName);
iName = iName + 1;
if (iName > 8){
iName = 0;
}
}
public String mtAlternative_Name(){
int iCycle;
String sName_Aux = "";
// iCurrent_Cycle is a global variable, assumes values from 0 to 73, and it controls the order in which arrPeople is supposed to be shown:
iCycle = iCurrent_Cycle % 18;
switch (iCycle){
case 1: sName_aux = "George"; break;
case 3: sName_aux = "Easy"; break;
case 5: sName_aux = "Chicago"; break;
case 10: sName_aux = "Henry"; break;
case 12: sName_aux = "Frank"; break;
case 14: sName_aux = "Denver"; break;
}
return sName_Aux;
}
Идея заключается в том, чтобы предотвратить «Адамс» занимать позиции 1, 3 и 5. Everytime он в тех положениях кто-то другой (sAlternative_Name) занимает место, а «Адамс» переходит к позиции, которую должен был принять человек. Массив arrPeople не изменяется, например:
Если «Адамс» должен был быть в положении 4, «Easy» занимает место и «Адамс» выходит на позицию 8. Но когда список вращается Agains (идущий foward), «Adams» занимает позицию 5, а «Easy» занимает позицию 9.
Я новичок в Java и не имею большого опыта программирования, но не могу понять, что не так с этим кодом ...
Оператор% Я использую его, чтобы сделать зеленые имена в категории «Адамс». Как вы можете видеть, «Бостон» и «Ида» не в игре ... но должны были быть ......... это нормально, и мне удастся что-то подумать позже, но правильно Теперь я бы хотел, чтобы я мог понять, почему мой код не работает ...
Спасибо большое ...
Вы уже прошли через код в своем отладчике IDE? Если нет, сделайте это и сообщите нам, в какой момент поведение отклоняется от вашего ожидания, и каковы соответствующие значения. –
Спасибо за ответ. Сейчас я не могу проверить это, и я не помню точно, какие результаты я получу. Я запускаю приложение в своем телефоне и планшете для тестирования (эмулятор медленно работает на моем компьютере ...). Вращение работает, это просто изменение позиций между переменной «Адамс» и переменной sAlternative_Name, которая не работает. Мне нужно будет вернуться через пару часов с подробными результатами. – RGeral
Прежде всего я не полностью понимаю проблему, которую вы решаете, но я думаю, что проблема может быть в строке: [sAlternative_Name! = ""] Изменить ее на [! SAlternative_Name.equalsIgnoreCase ("")] – Abbas