为什么此代码不反转用户输入的文本?

Why isn't this code reversing user inputted text?

System.out.println("type something to get it back reversed...");
Scanner sc1 = new Scanner(System.in);

String x = sc1.nextLine();//user input

for(int i = x.length(); i > 0; i--) 
{   
System.out.print(x.substring(i));
}

在这段代码中,我想获取用户输入的文本并使用 for 循环和 substring 方法以相反的顺序输出它(即 dog = god)。上面的代码是非功能性的。

例如... - 当我输入 "dog" 时,我得到 "gog"。 - 当我输入 "computer" 时,我得到 "rerteruterputermputeromputer"

它从不输出文本的第一个字母。如果有人能帮助我并向我解释一下,我将不胜感激:)

请参阅字符串 class 的 API。 String.substring(int index) 方法创建一个从参数索引到字符串末尾的子字符串(所以如果 x 是狗,x.substring(0) 会导致 'dog'。也许你希望使用两个参数子字符串方法。还要注意循环的索引,从长度 - 1 开始到 0

结束
for ( int i = x.length()-1; i >= 0; i-- ){
    System.out.print(x.substring(i, i+1));
}

substring(i) returns 字符串中从 i 到结尾的所有内容。要获取字符串中位置 i 处的字符,请使用 charAt(i)。 此外,字符串的最后一个索引是 x.length()-1。第一个是零。所以你的循环应该是这样的:

for (int i = x.length()-1; i>=0; --i) {
     System.out.print(x.charAt(i));
}

正如 copeg 所解释的,substring() returns 字符 i 之后的所有字符。一个更简单的解决方案是使用 charAt():

for(int i = x.length()-1; i >= 0; i--) {   
    System.out.print(x.charAt(i));
}