2017-10-05 71 views
0

当我输入一个数字时,将打印一张表,该表格应该如下图所示。 Expected output如何根据输出长度调整印刷表的长度(在控制台中打印)

我不知道如何根据输出的长度调整要打印的“ - ”的数量。 我也尝试过使用不同的数学计算,使用整数变量来增加字符数量并打印相同数量的“ - ”。

这里是我的输出: Output

这里是我的代码:

Scanner keyboard = new Scanner(System.in); 
    int num; 
    char line = 45; 
    StringBuilder sb = new StringBuilder(); 

    do { 
     System.out.println("Enter a number between 1 and 30"); 
     num = keyboard.nextInt(); 
     if (num == 0) System.exit(0); 
    } while (num < 1 || num > 30); 


    //TOP LINES --> THIS IS THE PROBLEM 
    for (int i = 0; i < num; i++) { 
     for (int j = 0; j < num/4; j++) { 
      sb.append(line); 
     } 
    } 
    System.out.println(sb); 

    //PRINTS FIRST PIPE 
    System.out.printf("|"); 


    for (int n = 1; n <= num*num; n++) { 
     System.out.printf(" %-3d|", n); 
     if (n % num == 0 && n != num*num){ 
      System.out.println(); 
      System.out.printf("|"); 
     } 
    } 

    //BOTTOM LINES 
    System.out.println("\n" + sb); 

回答

0

更改你的循环来计算的数量“-'s

//TOP LINES --> THIS IS THE PROBLEM 
for (int i = 0; i < num; i++) { 
    for (int j = 0; j < num/4; j++) { 
     sb.append(line); 
    } 
} 
System.out.println(sb); 


    >>>>>>> TO <<<<<<<< 

     //Determine the column size 
    String largestValue = "" + (num * num); // for 20, this is "400" 
    int strLen = largestValue.length(); // for 20, this is 3 + 1 space+ for right '|' 
    int width = (num * (strLen + 2)); 
    width++; // for right '|' 
    //TOP LINES 
    for (int i = 0; i < width; i++) { 
     System.out.print('_'); // I'm outputting an underscore 
    } 
    System.out.println(""); 
    System.out.print("|"); 
    for (int n = 1; n <= num; n++) { 
     System.out.printf(" %-" + strLen + "d|", n); 
    } 
    System.out.println(""); 
    for (int row = 1; row <= num; row++) { 
     System.out.print("|"); 
     for (int column = 1; column <= num; column++) { 
      System.out.printf(" %-" + strLen + "d|", (row * column)); 
     } 
     System.out.println(""); 
    } 
    //bottom LINES 
    for (int i = 0; i < width; i++) { 
     System.out.print('_'); 
    } 
    System.out.println("");