Это дает вывод, потому что вы уменьшаете i здесь:
while(last != first){
temp = s[last] + temp;
last--;
i--;
}
Есть два способа сделать это правильно, но если вы собираетесь сделать это таким образом, вы должны использовать любую строкуБиблиотека там, чтобы разрезать строку для вас.Вдобавок ко всему, ваш текущий алгоритм заставит first
пройти минус 0 в отрицательные значения, что приведет к некоторой ошибке, предположительно.
public String reverse(String sentence){
String reverse = "";
char [] s = sentence.toCharArray();
int first = s.length-1;
int last = s.length-1;
String temp = "";
for(int i = s.length-1; i>=0; i--){
while(s[first] != ' ' && first!=0){
first--;
}
if (first!=0) temp = s.substring(first+1, last);
else temp = s.substring(first, last);
last=first;
reverse = reverse + temp + " ";
}
return reverse;
}
Если по какой-либо причине вы не хотитеиспользовать подстроку и вместо этого хотеть сохранить свой исходный алгоритм, тогда все, что ему нужно, это удаление строки i--;
.
(я вижу, что кто-то другой опубликовал ответ, используя split(" ")
, что, вероятно,быть еще лучше.)