我只是想用字符数组做一些事情。当我扭转它时,每个原始角色之后都会有一个空间。为什么?我的代码片段就像这样
public class StringReverseChar {
//REVERSE A STRING CHARACTER BY CHARACTER
static String mStr=".gnihtemos od ot gniyrT ma I";
int len;
int topOfS;
char[] myReverse=new char[75];
public StringReverseChar() {
topOfS=-1;
myReverse=new char[70];
}
public static void main(String ar[]){
StringReverseChar mObj=new StringReverseChar();
int len=mObj.calLen(mStr);
for(int i=0;i<len;i++)
mObj.pushChar(mStr.charAt(i));
// System.out.println("The Reverse is:");
while(mObj.topOfS !=-1)
System.out.print(mObj.popChar());
}
private char popChar() {
return myReverse[topOfS--];
}
private void pushChar(char c) {
myReverse[++topOfS]=c;
System.out.print(myReverse[topOfS++]);
}
private int calLen(String mStr2) {
return mStr2.length();
}
}
我的输出是这样的:相反的是: 我知道了吗?
答案 0 :(得分:3)
罪魁祸首在这里:
private void pushChar(char c) {
myReverse[++topOfS]=c;
System.out.print(myReverse[topOfS++]);
}
你增加topOfS
两次。
请注意,整个代码可以替换为:
public class StringReverseChar {
static String mStr=".gnihtemos od ot gniyrT ma I";
public static void main(String ar[]) {
System.out.println(new StringBuilder(mStr).reverse());
}
}
答案 1 :(得分:2)
- 首先,除非必要,否则你应该永远不会重新发明轮子。
- 使用StringBuilder
(非线程安全)或StringBuffer
(线程安全)方法{{1 }}
<强>例如强>
reverse()
代码中的问题:
- 您将其递增两次。
String mStr= ".gnihtemos od ot gniyrT ma I";
String reStr = new StringBuilder(mStr).reverse();
答案 2 :(得分:1)
myReverse[++topOfS]=c;
System.out.print(myReverse[topOfS++]);
你为什么要增加两次?
答案 3 :(得分:1)
private void pushChar(char c) {
myReverse[++topOfS]=c;
System.out.print(myReverse[topOfS++]);
}
应该是:
private void pushChar(char c) {
myReverse[++topOfS]=c;
System.out.print(myReverse[topOfS]);
}
一个人。如果你做了那个改变,你还有问题吗?无法判断这是调试代码,还是总是存在的东西。