我是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*
答案 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的控制
注意:由于声誉不佳,我无法添加评论,因此必须将此作为答案。不要贬低这一点,而是建议通过评论进行更正。