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