首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java编程代码

Java编程代码
EN

Stack Overflow用户
提问于 2015-07-06 20:58:41
回答 4查看 100关注 0票数 2

我正在努力取得以下结果:

代码语言:javascript
复制
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 (其中,我的行号从0开始)。

我已经写下了这段代码,它实际上产生了这样的结果:

代码语言:javascript
复制
 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?

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-07-06 21:28:44

尝试将您的问题分成不同的部分,如

代码语言:javascript
复制
print N lines
  in each line print M values 

这样的循环看起来有点像

代码语言:javascript
复制
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)=...,我们知道

代码语言:javascript
复制
  x |  1  |  2  |  3  |
----+-----+-----+-----+ .....
f(x)| 120 | 200 | 280 |

所以在应用了一些数学之后

代码语言:javascript
复制
{120 = a*1 + b
{200 = a*2 + b 

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

现在我们需要找出其余元素的公式。

这很容易,因为我们知道它是通过2增加的,这意味着它是某种形式的firstValue + 2*(positionInLine -1)

最后一个问题是如何决定每行应该打印多少个值?

如果您仔细查看您的数据,您将看到每行包含与行号相同的值。因此,我们应该继续以长position<=line的形式打印值。

所以我们的最终解决方案看起来

代码语言:javascript
复制
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();
}
票数 2
EN

Stack Overflow用户

发布于 2015-07-06 21:04:15

没有测试,只使用我的大脑:

代码语言:javascript
复制
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变量是行的计数

可以从命令行将变量作为参数传递,例如:

代码语言:javascript
复制
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变量计数,您将看到以下顺序:

代码语言:javascript
复制
120, 200, 280, 360, 340, ...

这确实是第一列。

然后,您应该解决下一列,正如您所看到的,在每一行中,差异分别是+2,而每列也是+2,因此2*i*j解决了这个问题。

票数 3
EN

Stack Overflow用户

发布于 2015-07-06 21:07:30

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31255495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档