Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在没有StringBuilder的Java中反转字符串_Java_String_Reverse - Fatal编程技术网

在没有StringBuilder的Java中反转字符串

在没有StringBuilder的Java中反转字符串,java,string,reverse,Java,String,Reverse,我正在尝试在不使用StringBuilder的情况下反转字符串。我已经写了下面的代码,但是它一进入循环就给出了一个错误。错误是 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 16 at lectures.ReverseString.main(ReverseString.java:38) 如果有人能告诉我为什么那太好了。仅供参考,我意识到该代码既不高效也不优雅,但我想知道它为什么不适用于教育 publi

我正在尝试在不使用
StringBuilder
的情况下反转字符串。我已经写了下面的代码,但是它一进入循环就给出了一个错误。错误是

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 16
at lectures.ReverseString.main(ReverseString.java:38)
如果有人能告诉我为什么那太好了。仅供参考,我意识到该代码既不高效也不优雅,但我想知道它为什么不适用于教育

 public static void main(String[] args) {
    //declare variables
    Scanner input = new Scanner(System.in);
    String myString = "";
    int length = 0, index = 0, index2 = 0;

    //get input string
    System.out.print("Enter the string you want to reverse: ");
    myString = input.nextLine();

    //find length of string
    length = myString.length();
    index2 = length;

    //convert to array
    char[] stringChars = myString.toCharArray();
    char[] stringChars2 = stringChars;

    //loop through and reverse order
    while (index<length) {
        stringChars2[index] = stringChars[index2];
        index++;
        index2--;
    }

    //convert back to string
    String newString = new String(stringChars2);

    //output result
    System.out.println(newString);

    //close resources
    input.close();

}
publicstaticvoidmain(字符串[]args){
//声明变量
扫描仪输入=新扫描仪(System.in);
字符串myString=“”;
int-length=0,index=0,index2=0;
//获取输入字符串
System.out.print(“输入要反转的字符串:”);
myString=input.nextLine();
//查找字符串的长度
length=myString.length();
index2=长度;
//转换为数组
char[]stringChars=myString.tocharray();
char[]stringChars2=stringChars;
//循环和反向顺序

而(index数组中的最后一个索引不是
数组.length
,而是
数组.length-1
。数组是在零基上索引的,第一个索引是
0

例如,具有两个元素的数组具有索引
[0]
[1]
,而不是
[2]

在第一次迭代中,您可以访问
stringChars[index2]
index2=length
其中
length=myString.length()
。因此,
索引AutofBoundException
。仔细阅读您的代码并分析您需要的索引。创建一个小示例,使用一些小的打印语句调试代码,并查看您实际使用的索引


下面是一个更紧凑的反向算法的示例:

char[] input = ...

// Iterate in place, from both sides at one time
int fromFront = 0;
int fromEnd = input.length - 1;

while (fromFront < fromEnd) {
    // Swap elements
    char temp = input[fromEnd];
    input[fromEnd] = input[fromFront];
    input[fromFront] = temp;

    fromFront++;
    fromEnd--;
}

它应该是
index2=length-1;
记住数组是从0…length-1try索引的,使用这个:length=myString.length()1,顺便提一下,如果我能给出一个建议,你不需要两个数组来做这个。只要使用一个数组,带有两个索引变量,然后交换第一个和最后一个字符,然后将第二个和第二个字符互换到最后一个字符等等。
char[] input = ...
char[] reversedInput = new char[input.length];

// Reversely iterate through source
int forwardIndex = 0;
for (int i = input.length - 1; i > 0; i--) {
    reversedInput[forwardIndex] = input[i];
    forwardIndex++;
}