[英]For loop to print the number in sequence and reverse it
如何在Java中仅使用一个for循环打印以下输出?
1 2 3 4 5 6 7 8 9 1 0 9 8 7 6 5 4 3 2 1
程式码片段:
class Series{
public static void main(String args[]){
for(int i=1; i<=10; i++){
System.out.println(i);
}
System.out.println(i);
for(int j=9; j>=0; j--){
System.out.println(j);
}
}
我的程序采用以下方式。 有人可以纠正吗?
public static void main(String...strings ){
int dir = 1;
for(int i=1; i>0; i+=dir){
if(i == 10)
dir = -1;
System.out.print(i+" ");
}
}
输出:
1 2 3 4 5 6 7 8 9 10 9 8 7 6 5 4 3 2 1
问题中的系列是错误的。
应为:1 2 3 4 5 6 7 8 9 10 9 8 7 6 5 4 3 2 1
循环中的代码如下:
int ctr = 1;
for(int i = 1; i > 0; i += ctr)
{
if(i == 10)
{
ctr = -1;
}
System.out.print(i + " ");
}
每个序列都遵循一个模式,让我们尝试在其中找到一个。
要使用此代码,请分析将使用您增加的变量显示什么循环以及在输出中需要什么?
在您的问题中,假设您要输入的数字是由用户输入的,即n ,则您需要2 * n-1个数字。 因此,我们现在有了循环的极限
对于n = 5,在无条件的情况下,循环将仅打印这样的序列
1 2 3 4 5 6 7 8 9前提是您要从1开始循环。
您想要的顺序是1 2 3 4 5 4 3 2 1 。
现在查看这两个序列,您会发现直到达到n的中点为止,序列都是相同的。 现在,如果您进一步观察模式,如果从6中减去2,将得到4 ,这是您想要的序列号。 同样,当您从7中减去4时,您会得到3 ,这是您所需序列中的下一个数字。
因此,此序列遵循的模式是,在循环达到用户提供的值之后,您需要从下一个数字中减去(2 * k),其中k从1开始并随每次迭代增加
现在您知道如何实现使用条件语句容易实现的模式。
PS:让我们假设不使用条件语句会增加约束,然后我们必须编写一个算术表达式来解决我们的问题。
再次遵循模式,表达式必须显示i ,其中i是循环中递增的变量
所以我们的代码看起来像
for (i = 1; i<=2*n - 1;i++)
{
System.out.print(i);
}
现在,要获得模式,我们需要在达到用户提供的整数n后减去2的倍数。 但是我们减去的任何内容也不应影响前n个整数。
因为我们知道必须减去2的倍数,所以我们知道要减去的表达式看起来像2 *(____) 。 因为我们需要一个倍数序列,所以我们可以使用%获得它。 一旦数字超过n,i上的%运算符就会给我们从0到n-1的返回序列,从而生成2的倍数。
现在我们的表达式变为2 *(i%n) 。 但是问题在于,它还会从我们不希望的前4个整数中减去,因此我们必须进行更改,以使该表达式仅在循环达到用户提供的值后才起作用。
众所周知,除法/运算符为我们提供了商。 因此,当我们循环运行直到2 * n -1时,它会产生0直到达到用户定义数字的值,而剩下的1则产生该序列的其余部分。 因此,将此表达式乘以我们先前的表达式得出2 *(i%n)*(i / n)
在这里,我们生成序列的最终代码是
for (int i = 1;i<2*r;i++)
{
System.out.print(i - 2 * (i%r)*(i/r));
}
观察上面的代码,对于前n-1个整数,i / r将使被减去的表达式为0,对于i = n, i%r将使表达式为0。对于序列的其余部分, i / r将生成值1,因此我们从2 *(i%r)中得到2的倍数,为我们提供序列
尝试这个
int j = 10;
for (int i = 1; i <= 10; i++) {
if(i<10)
System.out.print(" " +i);
if(i==10){
i--;
System.out.print(" " +j);
if(j==1){
i++;
}
j--;
}
}
输出
1 2 3 4 5 6 7 8 9 10 9 8 7 6 5 4 3 2 1
像这样吗
for(int i=0;i<20;i++) {
if((i/10)%2 == 0)
System.out.print(i%10 + " ");
else
System.out.print((10-(i%10)) + " ");
}
尝试这段代码,您只需要在for循环中使用if条件。
int i = 1;
for(int j=1; j<=20; j++)
{
if(j<11)
System.out.print(j+" ");
else
{
System.out.print((j - i == 10 ?" ": (j-i + " ")));
i = i+2;
}
}
public class forLoopTest {
public static void main(String[] args) {
for (int i = 1; i < 10; i++) {
System.out.print(i + " ");
}
for (int j = 10; j >= 1; j--) {
System.out.print(j + " ");
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.