for循环中的条件表达式不会按预期运行

时间:2014-08-28 00:54:42

标签: java for-loop expression conditional palindrome

我似乎无法确定我的代码有什么问题。在阅读了String类之后,我尝试使用更短的代码向后打印回文,但除了执行换行符之外,我在控制台上什么也得不到。 我认为问题可能来自for语句中的条件表达式,因为当我使用“i< = l&& i> -1”并使用System.print(i +“”)调试它时,我得到了一个从17到0的数字列表。那么当前表达式可能有什么问题,为什么我不能使用“i< l&& i> -1”?是否存在违法行为,因为我打算使用16到0之间的数字?

public class StephenWork
{
    private String objString ;
    private int index;

    private void makeString ( String objString)
    {
        this.objString = objString;
    }

    private char[] printBackwards ()
    {
        int length = objString.length();
        char [] backwards = new char [length];

        for (index = length ; index < length && index > -1 ; index-- )
        {
            backwards [index] = objString.charAt(index);
        }

        return backwards;   
    }

    public static void main (String ... args)
    {
        String palindrome = "tod saw I was dot";

        int l = palindrome.length();
        char [] backwards = new char [l];

        for ( int i = l; i < l && i > -1 ; i-- )
        {

            //System.out.println(i); //I was using this to debug the value of i
            backwards [i] = palindrome.charAt(i);
        }

        String printPalin = new String (backwards);
        System.out.println(printPalin);

        StephenWork example = new StephenWork ();
        example.makeString("I love Java");
        System.out.println( example.printBackwards());
    }
}

2 个答案:

答案 0 :(得分:1)

索引设置为与length相同的值,因此循环将不会执行,因为条件最初为false。

答案 1 :(得分:0)

您的问题出在for循环的第一部分:

for( index = length ; index < length ...

for( int i = l; i < l ...

会给你带来麻烦。如果index设置为length的值,则其不小于长度,因此index < length返回false并且将完全跳过for循环。与您的il for循环相同。

相反,您应该初始化为length - 1

 for (index = length - 1 ; index < length && index > -1; index-- )
     backwards [index] = objString.charAt(index);

以相同的方式修改其他循环:

 for ( int i = l - 1; i < l && i > -1 ; i-- )
     backwards [i] = palindrome.charAt(i);