[英]Reverse String Program
我用C ++编写了一个简短的String反向程序。 我决定用Java编写它,所以我做到了。 但是,一旦完成编写程序,就会遇到一些我试图修复但无法修复的错误。 错误之一是ArrayOutOfBounds异常。 请帮助我修复错误。 C ++程序运行良好。 以下是Java代码。 请注意,我不想使用内置函数。
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
String word;
int i = 0;
boolean inp = true;
System.out.println("Enter one or more words to be reversed:");
word = scan.nextLine();
char wordArray[] = word.toCharArray();
while(wordArray[i]!='\0')
i++;
while(inp == true){
i--;
System.out.println(wordArray[i]);
if(i==0){
System.out.println();
break;
}
}
}
}
Java字符串中没有以null结尾的字符; 他们有一个length()
方法,您应该使用它来确定长度。
而且, while
循环更习惯于:
while (true) {
...
}
或作为简单的for
循环。
这是另一种可能,可能更简单:
public String reverse(String str) {
char[] chars = str.toCharArray();
int n = chars.length;
for (int i = 0; i < n/2; i++) {
char tmp = chars[i];
chars[i] = chars[n-i-1];
chars[n-i-1] = tmp;
}
return new String(chars);
}
尽管您提到不想使用内置函数,但最惯用的方式是:
public String reverse(String str) {
return new StringBuilder(str).reverse().toString();
}
java中的字符串不一定以null终止,您应该使用String.length()方法来找出它的长度。
Java字符串不是零结尾的,因此从字符串创建的字节数组也不是零。 您使用循环来确定数组的长度,但是该循环找不到值0的字节,因此它超出了范围。 请改用word.length()
。
第二件事:您使用System.out.println
打印字符-在每个字符后插入一个换行符。 这是故意的吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.