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

问题描述:

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

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()); 
    } 
} 
+0

如果在第一次迭代中'i = l',它不会通过条件检查'i Blorgbeard 2014-08-28 00:56:25

+0

for(int i = l; i> -1; i--) – Donal 2014-08-28 00:58:07

+0

'for(init; condition; increment){body}'相当于'init; while(condition){body;增量; }' - 如果你将for循环翻译成这种形式,问题应该会变得更加清晰。 – Blorgbeard 2014-08-28 01:00:46

索引设置为相同的值长,所以循环不会因为条件最初是错误的而执行。

您的问题是在你的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); 
+0

谢谢。我现在明白了。它必须是一个新手。我对自己很确定。你能把我放在正确的轨道上吗?我想让我通过回文索引来运行。 – NyproTheGeek 2014-08-28 01:26:29

+0

从最后一个索引开始向下。 – NyproTheGeek 2014-08-28 01:33:48