【问题标题】:Conditional expression in for-loop doesn't act as expectedfor 循环中的条件表达式未按预期运行
【发布时间】:2014-10-21 17:53:47
【问题描述】:

我似乎无法确定我的代码有什么问题。在阅读了 String 类之后,我尝试用更短的代码向后打印回文,但除了执行换行符之外,我在控制台上什么也没有。 而且我认为问题可能来自 for 语句中的条件表达式,因为当我使用“i -1”并使用 System.print(i +" ") 对其进行调试时,我得到了一个列表数字范围从 17 到 0。那么当前表达式可能有什么问题,为什么我不能使用“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());
    }
}

【问题讨论】:

  • 如果i = l在第一次迭代中,它不会通过条件检查i &lt; l
  • for (int i = l; i > -1 ; i--)
  • for (init; condition; increment) { body } 等价于init; while (condition) { body; increment; } - 如果您将 for 循环转换为该形式,问题应该会变得更加清晰。
  • 该死!这完全逃脱了我。谢谢大家,现在我可以看到哪里出错了。

标签: java for-loop expression conditional palindrome


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    会给你带来麻烦。如果index 设置为length 的值,则它不小于长度,因此index &lt; 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);
    

    【讨论】:

    • 谢谢。我现在明白了。成为新手一定很糟糕。我对自己很有信心。你能让我走上正确的轨道吗?我希望我遍历回文索引。
    • 从最后一个索引开始向下。
    猜你喜欢
    • 2015-03-31
    • 2021-04-04
    • 2022-12-12
    • 1970-01-01
    • 2015-10-10
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 2012-10-15
    相关资源
    最近更新 更多