2017-10-05 55 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("");