Вы не сказали нам, в чем ошибка.
Я замечаю следующее:
for(char x:letters){
Эта форма for
цикл будет перебирать каждый символ в letters
.Таким образом, x
будет установлен для каждого символа в letters
.Тем не менее, вы пытаетесь использовать его в качестве индекса - что нормально, так как char
может быть приведен к int
.Но, поскольку вы никогда не инициализируете массив символов (letters
), вы всегда получите значение 0
для x
.Это означает, что вы всегда устанавливаете первый элемент letters
, перезаписывая предыдущий.
for(int i=thing.length()...
.
Поскольку массивы имеют индекс 0, то length
будетвсегда быть на один больше, чем индекс последнего элемента.Таким образом, получая доступ к массиву с длиной массива, вы выходите за пределы на 1. Вы должны инициализировать i
до thing.length()-1
.
String retval += letters[i];
Это не компилируется - вы не можете объявить и добавление.retval
должен быть объявлен вне цикла for.
Вот исправление в вашем коде, которое делает использование метода toCharArray()
доступным для String
объектов:
public dids(String thing)
{
letters= thing.toCharArray();
String retval = "";
for(int i=thing.length()-1;i>=0;i--){
retval += letters[i];
}
}
Несколько более эффективное решение может быть:
public dids(String thing)
{
StringBuilder sb = new StringBuilder();
for(int i = thing.length()-1; i >=0; i-- )
{
sb.append(thing.charAt(i));
}
}
Это лучше, потому что
a.String
являются неизменяемыми, что означает, что после создания они не могут быть изменены (если вы не прибегаете к использованию отражения), и каждый раз, когда вы добавляете строку, вы фактически создаете новый объект, который в этой ситуации расточителен.StringBuilder
или StringBuffer
предназначен для использования в случае, когда вы хотите внести изменения в последовательность символов.
b.Поскольку String
может быть доступен символ за символом, вам на самом деле не нужно создавать символьное представление строки для ее обращения.