2016-03-20 3 views
0

У меня есть 9 имен, которые мне нужно отобразить в последовательности вращения. Как изображение:Логика сравнения не работает

rotation schedule

Как вы можете видеть, имена идут на одну позицию вниз в списке, с 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 и не имею большого опыта программирования, но не могу понять, что не так с этим кодом ...

Оператор% Я использую его, чтобы сделать зеленые имена в категории «Адамс». Как вы можете видеть, «Бостон» и «Ида» не в игре ... но должны были быть ......... это нормально, и мне удастся что-то подумать позже, но правильно Теперь я бы хотел, чтобы я мог понять, почему мой код не работает ...

Спасибо большое ...

+1

Вы уже прошли через код в своем отладчике IDE? Если нет, сделайте это и сообщите нам, в какой момент поведение отклоняется от вашего ожидания, и каковы соответствующие значения. –

+0

Спасибо за ответ. Сейчас я не могу проверить это, и я не помню точно, какие результаты я получу. Я запускаю приложение в своем телефоне и планшете для тестирования (эмулятор медленно работает на моем компьютере ...). Вращение работает, это просто изменение позиций между переменной «Адамс» и переменной sAlternative_Name, которая не работает. Мне нужно будет вернуться через пару часов с подробными результатами. – RGeral

+0

Прежде всего я не полностью понимаю проблему, которую вы решаете, но я думаю, что проблема может быть в строке: [sAlternative_Name! = ""] Изменить ее на [! SAlternative_Name.equalsIgnoreCase ("")] – Abbas

ответ

0

логика я использовал, которые создали 2 одномерный массив, который провел весь круглый стол (Без удаления Adams с позиций 1,3 или 5). Затем выполняется другой вложенный цикл, чтобы подставить «Адамс» в каждой строке «Чикаго». Наконец, печатается 2-мерный массив. Это даст вам результат. (я взял Чикаго в качестве альтернативного имени вместо Easy, потому что время от времени, легко может также быть в положении 1,3 или 5 по отношению к позиции Адама, так что развязка будет по-прежнему вызывает исключение сохраняться.)

String[] arrPeople={"Adams","Boston","Chicago","Denver","Easy","Frank","George","Henry","Ida"}; 
    String[][] roundtable=new String[9][9]; 
    int i,j,p; 
    for(i=0;i<9;i++){ 
    p=i; 
    for(j=0;j<9;j++){ 
     roundtable[i][j]=arrPeople[p++]; 
     if(p==9) 
     p=0; 
    } 
    } 

    for(i=0;i<9;i++){ 
    for(j=0;j<5;j+=2){ 
     if(roundtable[i][j].equals("Adams")){ 
     roundtable[i][j+2]="Adams"; 
     roundtable[i][j]="Chicago"; 
     break; 
     } 
    } 
    } 

    for(i=0;i<9;i++){ 
    for(j=0;j<9;j++) 
    System.out.print(roundtable[i][j]+"\t"); 
    System.out.println("\n"); 
    } 
Смежные вопросы