为什么这段代码没有反转用户输入的文字?

时间:2015-04-07 21:40:53

标签: java string for-loop substring

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循环和子串方法以相反的顺序(即dog = god)输出它。上面的代码是无效的。

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

它永远不会输出文本的第一个字母。如果有人能帮助我并向我解释这一点,我将非常感激:)

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

正如copeg所解释的那样,substring()会返回字符i之后的所有字符。更简单的解决方案是使用charAt()

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