繁体   English   中英

For循环按顺序打印数字并反转

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM