Java乘法表

时间:2017-01-10 15:10:33

标签: java for-loop nested nested-loops

我正在创建一个java程序,显示如下所示的乘法表:

1

但我只能从第1列到第5列获得结果。如何将其余部分显示在下方?

程序必须只包含一个for()嵌套循环。

到目前为止,这是我的代码:

import java.util.Scanner;
public class Table{
    public static void main(String[] args){

        Scanner s = new Scanner(System.in);
        System.out.print("Enter a number: ");

        int inputi = s.nextInt();

        for(int i = 1 ;i<=10;i++) {

            for(int j=1;j<=inputi && j <= 5;j++) {
                System.out.print(j + " x " + i + " = "  +(i*j) + "\t");
            }

            System.out.println();

            if(i >= 5)
            for(int j = 6; j <= inputi && j <= 10; j++){
                System.out.print(j + " x " + i + " = "  +(i*j) + "\t");
            }
        }

        System.out.println();
        System.out.println();
    }
}

有人可以帮忙吗?

感谢。

编辑:添加了示例输入。

Inputi = 7

预期产出:

Expected output

实际输出:

Actual output

3 个答案:

答案 0 :(得分:1)

此算法只有2层for循环,可以为您提供正确的输出。

import java.util.Scanner;

public class Table {
    public static void main(String[] args){

        Scanner s = new Scanner(System.in);
        System.out.print("Enter a number: ");

        int inputi = s.nextInt();

        for(int i = 0; i < Math.ceil(inputi / 5.0) * 10; i++) {
            if ( i > 0 && i % 10 == 0 ) System.out.println();

            int t = inputi - 5 * (i / 10);
            for(int j = 0; j < (t > 5 ? 5 : t); j++) {
                int a = 5 * (i / 10) + j + 1;
                int b = i % 10 + 1;
                System.out.print(a + " x " + b + " = "  + (a * b) + "\t");
            }
            System.out.println();
        }
    }
}

以下是input=11的示例输出:

1 x 1 = 1   2 x 1 = 2   3 x 1 = 3   4 x 1 = 4   5 x 1 = 5   
1 x 2 = 2   2 x 2 = 4   3 x 2 = 6   4 x 2 = 8   5 x 2 = 10  
1 x 3 = 3   2 x 3 = 6   3 x 3 = 9   4 x 3 = 12  5 x 3 = 15  
1 x 4 = 4   2 x 4 = 8   3 x 4 = 12  4 x 4 = 16  5 x 4 = 20  
1 x 5 = 5   2 x 5 = 10  3 x 5 = 15  4 x 5 = 20  5 x 5 = 25  
1 x 6 = 6   2 x 6 = 12  3 x 6 = 18  4 x 6 = 24  5 x 6 = 30  
1 x 7 = 7   2 x 7 = 14  3 x 7 = 21  4 x 7 = 28  5 x 7 = 35  
1 x 8 = 8   2 x 8 = 16  3 x 8 = 24  4 x 8 = 32  5 x 8 = 40  
1 x 9 = 9   2 x 9 = 18  3 x 9 = 27  4 x 9 = 36  5 x 9 = 45  
1 x 10 = 10 2 x 10 = 20 3 x 10 = 30 4 x 10 = 40 5 x 10 = 50 

6 x 1 = 6   7 x 1 = 7   8 x 1 = 8   9 x 1 = 9   10 x 1 = 10 
6 x 2 = 12  7 x 2 = 14  8 x 2 = 16  9 x 2 = 18  10 x 2 = 20 
6 x 3 = 18  7 x 3 = 21  8 x 3 = 24  9 x 3 = 27  10 x 3 = 30 
6 x 4 = 24  7 x 4 = 28  8 x 4 = 32  9 x 4 = 36  10 x 4 = 40 
6 x 5 = 30  7 x 5 = 35  8 x 5 = 40  9 x 5 = 45  10 x 5 = 50 
6 x 6 = 36  7 x 6 = 42  8 x 6 = 48  9 x 6 = 54  10 x 6 = 60 
6 x 7 = 42  7 x 7 = 49  8 x 7 = 56  9 x 7 = 63  10 x 7 = 70 
6 x 8 = 48  7 x 8 = 56  8 x 8 = 64  9 x 8 = 72  10 x 8 = 80 
6 x 9 = 54  7 x 9 = 63  8 x 9 = 72  9 x 9 = 81  10 x 9 = 90 
6 x 10 = 60 7 x 10 = 70 8 x 10 = 80 9 x 10 = 90 10 x 10 = 100   

11 x 1 = 11 
11 x 2 = 22 
11 x 3 = 33 
11 x 4 = 44 
11 x 5 = 55 
11 x 6 = 66 
11 x 7 = 77 
11 x 8 = 88 
11 x 9 = 99 
11 x 10 = 110   

答案 1 :(得分:1)

我建议

  1. 创建具有所需列数的单独变量
  2. 计算要打印的行数(请参阅Timer timer = new Timer(true); timer.scheduleAtFixedRate(new CustomTimerTask(shapes/*, */), 0, 0.1 * 1000);
  3. 逐行打印行
  4. 请参阅下面的代码段:

    iterations

    请注意,如果inputi很大,当您有int inputi = 12; int columns = 5; int iterations = inputi / columns + (inputi % columns > 0 ? 1 : 0); for (int iter = 0; iter < iterations; iter++) { for (int i = 1; i <= 10; i++) { for (int j = iter * columns + 1; j <= Math.min(inputi, (iter + 1) * columns); j++) { System.out.print(j + " x " + i + " = " +(i * j) + "\t\t"); } System.out.println(); } System.out.println(); } 1 x 1 = 1

    等语句时,可能必须使用额外的空格填充输出,以避免布局问题

答案 2 :(得分:0)

这将为您提供所需的输出:

import java.util.Scanner;

public class Table{
public static void main(String[] args){

    Scanner s = new Scanner(System.in);
    System.out.print("Enter a number: ");

    int inputi = s.nextInt();
    for(int i = 1 ;i<=10;i++) {

        for(int j=1;j<=inputi && j <= 5;j++) {
            System.out.print(j + " x " + i + " = "  +(i*j) + "\t");
        }

        System.out.println();
    }

    System.out.println();
    System.out.println();

    for(int i = 1 ;i<=10;i++) {

        for(int j=6;j<=inputi && j <= 10;j++) {
            System.out.print(j + " x " + i + " = "  +(i*j) + "\t");
        }

        System.out.println();
    }

  }
}