Java编程代码

时间:2015-07-06 20:58:42

标签: java loops

我正在努力产生以下结果:

POST

如您所见,每行增加80,每行中连续数字之间的差异为i * 2(其中i行号以0开头)

我已经写下了这段代码,实际上是这个结果:

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。有没有办法可以添加另一个永远的循环呢?还添加了2s?

由于

4 个答案:

答案 0 :(得分:3)

未经测试,仅使用我的大脑:

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解决了这个问题

答案 1 :(得分:2)

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();
        }
    }
}

答案 2 :(得分:2)

尝试将问题分解为单独的部分,例如

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();
}

答案 3 :(得分:0)

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();
}