我必须翻转句子,但问题是我没有得到确切的输出。 如果输入是“今天是星期一”,我的输出是“y a d n o m s m o n d y” 但我必须得到“不管怎么样” 请帮帮我...
public class reversesentence {
public static void main(String[] args) {
String sent = "today is monday";
char ch[] = sent.toCharArray();
int n= ch.length;
// System.out.println("before reverse:");
// for(int i=0;i<n;i++){
// System.out.print(ch[i]+" ");
// }
for(int i=0; i<n; i++){
//System.out.println("hello");
ch[i]= ch[n-i-1];
}
System.out.println("\nafter reverse:");
for(int i=0;i<n;i++){
System.out.print(ch[i]+" ");
}
}
}
答案 0 :(得分:0)
如果需要反向字符串,请查看apache commons:
String reversed = org.apache.commons.lang3.StringUtils.reverse(str);
答案 1 :(得分:0)
在你增加i时递减n(并且不要忘记int n = ch.length - 1;
)
另外,不要忘记进行不同的比较 - n >= 0
会浮现在脑海中。
[编辑]
并且还要注意,你不能在原地进行,你需要一个临时的字符串,因为一旦你到了中间,你就没有了字符:)
[/编辑]
答案 2 :(得分:0)
这听起来像是学校的编程练习......
public class reversesentence {
public static void main(String[] args) {
String sent = "today is monday";
char ch[] = sent.toCharArray();
char tmp;
int length = ch.length;
int maxNdx = length - 1;
int stopAt = maxNdx / 2;
for (int ndx = 0; ndx < stopAt; ndx++) {
int ndx2 = maxNdx - ndx;
tmp = ch[ndx];
ch[ndx] = ch[ndx2];
ch[ndx2] = ch[ndx];
}
System.out.println();
System.out.print("After reverse: ");
for(int i=0;i<n;i++){
System.out.print(ch[i]+" ");
}
}
}
为了在内存中交换两个项目,您需要第三个位置暂时保留其中一个项目。在这种情况下,tmp是临时位置。
要反转数组,您要交换最后一个字符的第一个字符,第二个字符替换第二个字符,等等。因此,您只需要遍历数组的1/2。该函数使用整数除法将最高数组索引分成两半,这实际上为您提供了数学平台(例如,长度为7的数组的最大索引为6,因此中间单元格位于索引3处。)
我保留了您对单个字符的打印,但您可以使用System.out.println(new String(ch))
代替。
答案 3 :(得分:0)
试试这个:
public class reversesentence { public static void main(String[] args) { String sent = "today is monday"; sent = sent.replaceAll(" ", ""); char[] s = sent.toCharArray(); char ch[] = new char[((sent.length()*2)-1)]; int j = 0; int i = 0; for(i = sent.length()-1; i>0; i--){ ch[j] = s[i]; j++; ch[j] = ' '; j++; } ch[j] = s[i]; System.out.println(ch); } }
希望这就是你想要的。
答案 4 :(得分:0)
我会在上面的程序中声明一个小的修正,你在那里将值存储到一个临时变量中,但是忘了进一步使用它
ch[ndx2] = tmp;