每个循环如何工作?

时间:2019-03-27 11:06:30

标签: java loops foreach

在下面的代码中,我试图反向打印句子。这个对我有用。

我不明白为什么它先打印“七个”而不打印“一个”。

据我下面在for-each循环中的知识,意思是“单词列表”中的“单词”,即原始单词和迭代单词。然后在下一个语句中,先“单词”,然后“反转”。

为什么索引从0开始时先打印“七”而不打印“一”?为什么最后一个索引排在第一位?如果我弄错了,请纠正我。

任何帮助将不胜感激。请参见下面的代码:

public class String_Reverse {

    public static void main(String[] args) {


        String s = "one two three four five six seven";
        System.out.println(reverse(s)); // seven six five four three two one


    }

    public static String reverse(String str) {
        String reversed = "";
        String[] original = str.trim().split(" ");
        for(String words : original) {
            reversed = words + " " + reversed;
        }
        return reversed;
    }

}

2 个答案:

答案 0 :(得分:1)

您正在按索引的升序对数组进行迭代,因此最后一个索引不会排在第一位。

但是,您正在通过将当前String与中间结果(由上一次迭代创建)串联来创建输出。

例如,第一次迭代会产生以下结果:

"one" + " " + ""
"two" + " " + "one "
"three" +" " + "two one "
...

最后,最后一个元素“七个”附加到“六个五个四个三个两个一个”之后,因此最终所有元素以相反的顺序串联在一起。

答案 1 :(得分:1)

循环迭代如下:

第一次迭代之前 reversed= ""

第一次迭代:words = "one"reversed="one "

第二次迭代:words = "two"reversed="two one "

第三次迭代:words = "three"reversed="three two one "

第四次迭代:words = "four"reversed="four three two one "

第五次迭代:words = "five"reversed="five four three two one "

第六次迭代:words = "six"reversed="six five four three two one "

第7次迭代:words = "seven"reversed="seven six five four three two one "