我想创建一个产生以下内容的循环:
5
4 3
2 1 0
以下是我的尝试:
int sn, counter1,counter3,x;
int counter2 = 0;
int y = 1;
Scanner scn = new Scanner(System.in);
for(counter1 = 5; counter2 <= counter1; counter1--){
for(x = 5; x > y; y++){
System.out.print(counter1);
}
}
我是编程新手,但还没有遇到过。
答案 0 :(得分:2)
对于新程序员来说,这不是一个微不足道的问题。我认为最好的方法是尝试让您的程序反映出如果您必须用您的母语描述如何操作,您将会做些什么。
首先,你有三条线。所以我们称它们为“第0行”,“第1行”和“第2行”。 (大多数程序员倾向于喜欢从0开始而不是从1开始。但如果你愿意的话,你可以从1开始做一些调整。)所以你会有这样的循环:
for (int line = 0; line < 3; line++) {
// something
}
这将执行line=0
,line=1
,line=2
的循环。它不会对line=3
执行此操作,因为3<3
为false。
现在,对于每一行,您将打印一定数量的数字(或列):第0行为1,第1行为2,等等,这意味着您将显示的数字是行号加1 。所以你会有一个看起来像
的循环for (int column = 0; column < line + 1; column++) {
// something
}
在打印完行中的所有数字后,您需要告诉程序转到下一行。
for (int line = 0; line < 3; line++) {
for (int column = 0; column < line + 1; column++) {
// something
}
System.out.println(); // go to the next line
}
所以现在你所要做的就是打印数字。请注意,第一个数字是5,每次打印时它都会减少。因此,首先将计数器设置为5.您不希望它为每行或每列重置为5,因此它属于循环外部。然后,对于每列,打印计数器并将其减少1.
int counter = 5;
for (int line = 0; line < 3; line++) {
for (int column = 0; column < line + 1; column++) {
System.out.print(counter); // print the current counter
System.out.print(" "); // print a space between each number
counter--; // decrease the counter by 1
}
System.out.println(); // go to the next line
}
这应该做你想要的,最重要的是,它也反映了你如何考虑自己完成这个,所以它应该很容易理解。这是一个重要的优秀程序质量,几乎和它正常工作一样重要。
编辑:我的主要目的是演示如何看待问题,思考如何手动解决问题,并在程序中表达这些想法。如果以任意数字(而不是5)开始,并且意图是将数字显示为0,则您将不会事先知道将显示多少行(您需要使用二次公式来计算它)。因此必须进行一些调整:不是显示一定数量的线,外部循环将一直持续到计数器达到0.如果计数器在中间达到0,你必须弄清楚要做什么一条线。但基本技术几乎相同。
答案 1 :(得分:1)
尝试以下代码:
public static void main(String[] args) {
int line = 1;
int number = 5;
while (number>=0){
for(int cnt = 0;cnt < line; cnt++,number--){
System.out.print(number +" ");
}
line++;
System.out.println();
}
在这段代码中,变量行保存当前行号,变量号是您要传递的任何整数,例如:5。当前数字变量是硬编码的,但是您可以从命令行参数传递和读取它。
现在,while循环基本上检查变量号。循环条件返回true直到数字变为0,因此基本上旅程从原始值开始直到0。
For循环基本上检查行号和值,以便在一次出现时打印。它还在每次执行中将数值减1(数字 - )。一旦它从for循环中出来,它会将行号增加1(行++),并使用sysout语句将光标移动到下一行。