对于循环,按顺序打印数字并反转它

时间:2013-12-23 06:02:20

标签: java

如何在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);        
   }          
} 

我的节目以下列方式进行。任何人都可以纠正吗?

7 个答案:

答案 0 :(得分:11)

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)

问题中的系列是错误的。

应该是: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 + " ");
}

答案 2 :(得分:1)

每个序列都遵循一个模式,让我们尝试在此中找到一个。

要使用此代码,请分析使用变量打印的循环增量以及输出中需要的内容?

在您的问题中,假设您输入的号码是由用户输入的,即 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的倍数,以便为我们提供序列

答案 3 :(得分:0)

试试这个

 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

答案 4 :(得分:0)

这样的东西?

    for(int i=0;i<20;i++) {
        if((i/10)%2 == 0)
            System.out.print(i%10 + " ");
        else
            System.out.print((10-(i%10)) + " ");
    }

答案 5 :(得分:0)

试试这段代码,你只需要在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;
            }
       }

答案 6 :(得分:-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 + " ");
        }

    }
}