Hey guys, I am making something that it takes a char, then it sums it with 5 and returns the new char according to the ASCII table, for example input is 'a' , then output will be 'f'. This code is doing it somewhat ..

``````public static String Puzzle(String s) {
char[] c = new char[s.length()];
for(int i =0; i<s.length();i++)
c[i] =(char) (s.charAt(i) + 5);
return new String(c);
}
``````

but the problem is that if I get 'z' input for example, my result is not what it has to be since the program should return back from 'a' and forward till count 5 and return the new char. Any ideas how to work around this and keep it so that it loops back the the chars 97-122 (small letters in english)

You can use the modulo operator `%` to loop. Look it up, if you have problems post back.

97 to 121 %122 gives it right but then when I go at 122 or higher than it gets scrumbled

Assume a to be 0, z 25. That would be your index. You can then add 97 to get the character you need. In pseudo:

``````index = char - 97
newIndex = (index + 5) % 26
newChar = 97 + newIndex
``````

It worked thanks, just out of curiousity, would it be able to work if we don't substract 97?

No. The modulus operator is zero based. It will return a value between 0 and the one you specify (exclusive). So if you do `% 122` it will return a value between 0 and 121. Consider 97 your base, and 0 to 25 the index of the number you want.

One small point: instead of using the mysterious 97, you can use the char literal 'a' which makes the code far more obvious, eg

``````    index = char - 'a'
newIndex = (index + 5) % 26
newChar = 'a' + newIndex
``````

oh, didnt know thank, thanks James