2016-12-18 5 views
0

Это должно помещать слово yup на каждый второй символ, yap на каждый пятый и оба yup yap на каждую десятую. Он помещает только yup для каждого второго символа.Else if не работает

Я не могу понять, в чем проблема. Спасибо за помощь.

for(int i = 0; i < word.length(); i++) { 

     if(i % 2 != 0) { 
      System.out.print(word.charAt(i) + " yup"); 
      System.out.println(); 
     } 
     else if(i + 1 % 5 == 0) { 
      System.out.print(word.charAt(i) + " yap"); 
      System.out.println(); 
     } 
     else if(i + 1 % 10 == 0) { 
      System.out.print(word.charAt(i) + " yup yap"); 
      System.out.println(); 
     } 
     else{ 
      System.out.println(word.charAt(i)); 
     } 

    } 

} 
+1

У вас была попытка отладки вашего приложения? Установите точку останова в начале и выполните код, чтобы увидеть, что он делает. – mattias

+5

Уход за приоритетом вашего оператора '((i + 1)% 5 == 0)' – Xephi

+0

Что такое неожиданное? – Mordechai

ответ

3

Положить() в свои else if операции. Мод (%) имеет приоритет над суммой, поэтому он не работает.

else if((i + 1) % 5 == 0) 

и

else if((i + 1) % 10 == 0) 
+1

'(i + 1)% 10 == 0' все еще не работает. Он будет скрыт как 'i% 2! = 0' *, так и' '(i + 1)% 5 == 0'. – Andreas

+0

@ Андреас, ты прав. Помимо проблемы приоритета оператора, это еще одна проблема. – deChristo

3

Модульное 5 "скрывает" по модулю "10". Вы должны пересмотреть свой алгоритм. Любое число, которое кратно 10, также кратно 5.

+1

'i% 2! = 0' hides' (i + 1)% 10 == 0', поэтому '(i + 1)% 5 == 0' никогда не получит возможность скрыть его. * (предполагая, что parens добавлены, как предложено [другим ответом] (http://stackoverflow.com/a/41211354/5221149)) *. – Andreas

+0

Немного изменил его, и теперь он работает, спасибо за помощь! – Dagon

1

Поменяйте если-иначе заявления и поставить i + 1 в фигурных скобках:

if((i + 1) % 10 == 0) { 
     System.out.print(word.charAt(i) + " yup yup"); 
     System.out.println(); 
    } 
    else if((i + 1) % 5 == 0) { 
     System.out.print(word.charAt(i) + " yap"); 
     System.out.println(); 
    } 
    else if(i % 2 != 0) { 
     System.out.print(word.charAt(i) + " yup"); 
     System.out.println(); 
    } 
    else{ 
     System.out.println(word.charAt(i)); 
    } 

(i + 1) % 10 Если равен нулю, то (i + 1) % 5 равен нулю, тоже.

+0

'i + 1% 10 == 0' действует только для' i = -1', т. Е. Здесь это не так. – Andreas

+0

Я забыл скобки. Теперь это работает. –

0

Пожалуйста, позаботьтесь о приоритете оператора, потому что Mod (%) имеет приоритет над суммой (+).

else if(i + 1 % 5 == 0) 

Это else if не работает, как это предполагается, потому что Mod (%) будет выполняться до суммы (+). Вот почему вам нужно изменить код, чтобы заставить его работать:

else if((i + 1) % 5 == 0) 
+0

Этот ответ требует уточнения. «Пожалуйста, позаботьтесь» не уточняет, какие проблемы могут возникнуть из-за приоритета. – Todd

+0

else if (i + 1% 5 == 0) Это другое, если оно не работает должным образом, потому что Mod (%) выполнит перед суммой (+). Вот почему мы должны немного изменить код, чтобы сделать его работоспособным как else if ((i + 1)% 5 == 0) –