簡體   English   中英

Java編程代碼

[英]Java Programming Code

我試圖產生以下結果:

120
200   202   
280   284   288   
360   366   372   378   
440   448   456   464   472   
520   530   540   550   560   570   
600   612   624   636   648   660   672   
680   694   708   722   736   750   764   778   
760   776   792   808   824   840   856   872   888  

如您所見,每行增加80,每行中連續數字之間的差異為i * 2(其中i行號從0開始)

我已經寫下了這段代碼,實際上是這個結果:

 public  class Triangle
 {

       public static void main(String [] args)

       {
            System.out.println(120);
              System.out.print(i + "   ");
            }
            System.out.println();
            for (int i = 280 ; i <= 288; i = i + 4 ) {
                System.out.print(i + "   ");
            }
            System.out.println();
                  System.out.print(i + "   ");
            }
            System.out.println();
            for (int i = 440 ; i <= 472; i = i + 8 ) {
                 System.out.print(i + "   ");
            }
            System.out.println();
            for (int i = 520 ; i <= 570; i = i + 10 ) {
                 System.out.print(i + "   ");
            }
            System.out.println();
            for (int i = 600 ; i <= 672; i = i + 12 ) {
                 System.out.print(i + "   ");
            }
            System.out.println();
            for (int i = 680 ; i <= 778; i = i + 14 ) {
                 System.out.print(i + "   ");
            }
            System.out.println();
            for (int i = 760 ; i <= 888; i = i + 16 ) {
                 System.out.print(i + "   ");
            }
            System.out.println();
            }
          }

但是,這段代碼真的很長。 你可以看到我每次都加80。 有沒有辦法可以添加另一個永遠的循環呢? 還添加了2s?

謝謝

未經測試,僅使用我的大腦:

for(int i=0;i<input;i++){
    int firstNumber = 120+80*i;
    for(int j=0;j<=i;j++){
        System.out.print(firstNumber+2*i*j); //optimalization firstNumber+(i*j<<1)
    }
    System.out.println();
}

編輯輸入

input變量是行數

您可以從命令行傳遞變量作為參數,例如:

public static void main(String[] args){
    int input=5; //default value
    try{
        input=Integer.valueOf(args[0]); //trying to get integer from command line
    }catch(ArrayIndexOutOfBoundsException e){
        System.out.println("Missing parameter");
    }catch(Exception e){
        System.out.println("First parameter is not an integer");
    }
    //input variable is now parameter or 5 by default
    for(int i=0;i<=input;i++){
        int firstNumber = 120+80*i;
        for(int j=0;j<i;j++){
            System.out.print(firstNumber+2*i*j);
        }
        System.out.println();
    }
}

編輯說明

第一個數字在第一列中是可變的,如果您按i變量計數,您將看到以下序列:

120, 200, 280, 360, 340, ...

這真的是第一列。

然后,您應該解決下一列,如您所見,在每一行中,每個中的差異為+2,並且在每一列中也是+2,所以2*i*j解決了這個問題

public class Triangle {
    public static void main(String [] args) {
        int base_int = 40;
        for (int row = 1; row < 10; row++) {
            for (int col = 0; col < row; col++) {
                int result = base_int + (80 * row) + (2 * (row - 1) * col);
                 System.out.print(result);
                System.out.print(" ");
            }
            System.out.println();
        }
    }
}

嘗試將問題分成不同的部分,例如

print N lines
  in each line print M values 

這樣的循環可能看起來或多或少

for (int line = 1 ; line <= N; line++){
    for (int position = 1; position <= M; position++){
        print(calculateFor(line, position));
    }
    printLineSeparator;
}

(我從1開始索引,但你應該習慣於從0開始索引,所以考慮將這些循環重寫for (int x = 0; ...)作為家庭作業)

現在我們的問題是根據line號及其position in line來計算適當的值。

讓我們從確定每一行中第一個值的公式開始。
我們可以很容易地計算它,因為它是線性函數f(line)=...我們知道這一點

  x |  1  |  2  |  3  |
----+-----+-----+-----+ .....
f(x)| 120 | 200 | 280 |

在應用了一些數學后

{120 = a*1 + b
{200 = a*2 + b 

我們可以看出f(line)80 * line + 40

現在我們需要找出其余元素的公式。
這很容易,因為我們知道它增加了2 ,這意味着它是形式firstValue + 2*(positionInLine -1)

現在最后一個問題是如何確定每行應打印多少個值?
如果仔細查看數據,您會看到每行包含與行號相同的值。 所以我們應該繼續打印值作為長position<=line

所以我們的最終解決方案看起來像

for (int line = 1; line <= 9; line++) {
    int firstValueInCurrentLine = 80 * line + 40;
    for (int position = 1; position <= line; position++) {
        System.out.print(firstValueInCurrentLine + 2 * (position -1) + "  ");
    }
    System.out.println();
}
for (int i = 0, m = 120; i < 9; ++i, m += 80) {
    for (int j = 0, s = i + i, n = m; j <= i; ++j, n += s)
        System.out.print(n + "   ");
    System.out.println();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM