簡體   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