理解Java中的for循环

时间:2015-06-18 11:17:04

标签: java for-loop

我是Java的新手 我似乎无法理解为什么这两个代码产生不同的输出。

请向我解释一下。
y<=x;y<=5;之间有什么区别?你可以看到x也是5,我不明白为什么我会得到不同的输出。

for (int x = 0; x < 5; x++) {
    for (int y = 1; y <=x ; y++) {
        System.out.print("x");
    }

    for (int g = 4; g >= x; g--) {
        System.out.print("*");
    }                       
    System.out.println();
}

输出:

*****

x****

xx***

xxx**

xxxx*

代码:

for (int x = 0; x < 5; x++) {
    for (int y = 1; y <= 5; y++) {
        System.out.print("x");
    }

    for (int g = 4; g >= x; g--) {
        System.out.print("*");
    }                       
    System.out.println();
}

输出:

xxxxx*****

xxxxx****

xxxxx***

xxxxx**

xxxxx*

10 个答案:

答案 0 :(得分:9)

基本上主要区别在于这一行:

for(int y=1; y<=x; y++)

RESP。

for(int y=1; y<=5; y++)

循环执行的次数不同。即在第一种情况下它是可变的(因此'x'的数量增加),在第二种情况下它是固定的(每次打印5'x')。

(编辑:错字)

答案 1 :(得分:5)

x从0开始,因此第一次迭代的条件为y<=0,第二次迭代的条件为y<=1,依此类推......直到y<=5

虽然第二个在每次迭代中都会有y<=5,这就是为什么你在每一行都得到xxxxx。

答案 2 :(得分:4)

在第一个代码中,您打印x次&#34; x&#34;每行中的字符串。

for(int y=1; y<=x; y++) {
    System.out.print("x");
}
顺便说一句,它会打印以下内容(与您在问题中声明的内容不同):

*****
x****
xx***
xxx**
xxxx*

在第二个代码中,您打印5次&#34; x&#34;每行中的字符串。

for(int y=1; y<=5; y++) {
    System.out.print("x");
}
  

正如你所看到的那样x = = 5

不,x从0迭代到4,所以在外部for循环的每次迭代中,它都有不同的值。

答案 3 :(得分:3)

在您的第一个代码中,FILTER-STORE用于外部for(int y=1; y<=x; y++)循环的迭代是 -
for用于外循环的第一次迭代
for(int y=1;y<=0;++y)用于外循环的第二次迭代
for(int y=1;y<=1;++y)用于外循环的第三次迭代
for(int y=1;y<=2;++y)用于外循环的第四次迭代
for(int y=1;y<=3;++y)用于外循环的第五次迭代

但是在你的第二个代码中它总是 -
for(int y=1;y<=4;++y)
外部for循环的所有迭代的

答案 4 :(得分:2)

非常简单,将运行5次,每次运行时,其值将增加1,即从0增加到4。

所以在第一个循环中,内部循环将具有如下条件:

for (int y = 1; y <= x; y++) {
      System.out.print("x");
}

但是因为在第一个循环中x的值为0所以它的字面意思是:

for (int y = 1; y <= 0; y++) {
      System.out.print("x");
}         

但是在外环的最后一个迭代中,x的值为4,因此这相当于:

for (int y = 1; y <= 4; y++) {
     System.out.print("x");
}

所以它迭代了4次。

答案 5 :(得分:1)

在你的第一个例子中,y首先小于x = 1,并且在下一次迭代期间,它将减去x = 2 ...因为x值随着你的第一个for循环而变化。

对于第二个例子,你要声明y必须小于5,而根本不会改变。

答案 6 :(得分:1)

它们是不同的,因为在第一种情况下,x基于以下因素从0到4变化:   for(int x = 0; x <5; x ++)

在第二种情况x固定为5的情况下。

答案 7 :(得分:0)

我已使用新的stringRepeat函数替换了两个内部for循环。这种方式可能更容易理解。

public class ForLoopStarsAndCrosses {

    public static void main(String[] args) {
        /// the total length ot the x's and stars
        final int length = 5;
        // start with 1 x until one less than the length (in this case 4)
        for(int x = 1; x < length; x++) {
            // the number of stars equals the total length minus the number of x's
            final int nbStars = length - x;
            // add the x's and the stars
            final String output = stringRepeat("x", x) + stringRepeat("*", nbStars);
            System.out.println(output);
        }
        System.out.println();
    }

    /** Repeat the string s n times */
    private static String stringRepeat(String s, int n) {
        String result = "";
        for (int i = 0; i < n; i += 1) {
            result += s;
        }
        return result;
    }
}

答案 8 :(得分:0)

首先,您应该了解值和变量之间的区别。当你写5时,值是一个常数,但变量可以改变。

对于您的问题,第一个代码和第一轮

x = 1, y<= 1 and output: x

for(int y=1; y<=x; y++){
                System.out.print("x");
            } 

但是对于第二个代码和第一轮

y<=5 so output is: xxxxx

for(int y=1; y<=5; y++){
            System.out.print("x");
        }

非常简单。

答案 9 :(得分:0)

循环的目的(可以是for,while,do-while)是在特定条件下要执行的同一组语句的次数。 &#34;对于&#34;是一个确定的循环,其中将有一个以整数开头的索引,保持增量直到达到条件。 &#34;而&#34;是一个无限循环,没有索引,它将被执行,直到达到条件。 &#34;做-而&#34;是一个类似于&#34;和#34;的循环,它将至少执行一次,然后验证下一次迭代的条件。

基于以上细节,

for(int x=0; x<5; x++){
        for(int y=1; y<=x; y++){

for(int x=0; x<5; x++){
        for(int y=1; y<=5; y++){

这两个条件之间的区别是, 第一个条件: 在第一次迭代中,x的值为0,对于第二次循环,y以1开始。 这里当它将值与x比较为0且1 <= 0且为假时,此条件失败并且Y下的语句将不会被执行,控件将返回x的控制。

第二个条件: 在第一次迭代中,x的值为0,对于第二次循环,y以1开始。 这里,当它将值与5,1 <= 5进行比较时,该条件是有效的并且Y下的语句将被执行并且控制将返回x的控制直到y变为6并且检查的条件是6 <= 5这是假的,这个条件失败了,Y下的语句不会被执行,控件将返回x的控制

注意:由于声誉不佳,我无法添加评论,因此必须将此作为答案。不要贬低这一点,而是建议通过评论进行更正。