Как выровнять строку на выходе консоли

Я должен написать код для:

Таблицы умножения Описание: Распечатайте школьную таблицу умножения до 12*12

Я написал код:

public class tables {
    public static void main(String[] args) {
        //int[][] table = new int[12][12];
        String table="";
        for(int i=1; i<13; i++){
            for(int j=1; j<13; j++){
                //table[i-1][j-1] = i*j;
                table+=(i*j)+" ";
            }
            System.out.println(table.trim());
            table="";
        }
    }
}

Но проблема с форматом вывода. Мне нужен вывод в виде матрицы, подобной моде, каждое число отформатировано до ширины 4 (числа выровнены по правому краю и удаляют начальные/конечные пробелы в каждой строке). Я пробовал google, но не нашел хорошего решения своей проблемы. Кто-нибудь может мне помочь?


person Mohammad Faisal    schedule 09.10.2012    source источник
comment
@khachik: не могли бы вы описать, как работает String.format(%4s", ...)? а какой второй аргумент в format()?   -  person Mohammad Faisal    schedule 09.10.2012


Ответы (3)


Вы можете использовать format() для форматирования вывода в соответствии с вашими потребностями.

    for(int i=1; i<13; i++){
        for(int j=1; j<13; j++){

           System.out.format("%5d", i * j);
        }
        System.out.println();  // To move to the next line.
    }

Или вы также можете использовать: -

System.out.print(String.format("%5d", i * j));

вместо System.out.format..

Вот объяснение того, как работает %5d: –

  • Во-первых, поскольку мы печатаем целое число, мы должны использовать %d, который является спецификатором формата для целых чисел.
  • 5 в %5d означает общую ширину вашего вывода. Итак, если ваше значение равно 5, оно будет напечатано, чтобы покрыть 5 пробелов, например: - ****5
  • %5d используется для выравнивания по правому краю. Для выравнивания по левому краю вы можете использовать %-5d. Для значения 5 это напечатает ваш вывод как: - 5****
person Rohit Jain    schedule 09.10.2012
comment
Спасибо. Оно работает. Не могли бы вы описать в своем ответе, как %5s работает в format()? - person Mohammad Faisal; 09.10.2012
comment
@MohammadFaisal.. Вы можете использовать %5d, так как вы печатаете целое число.. Я объясню в посте.. - person Rohit Jain; 09.10.2012
comment
@MohammadFaisal: проверьте [javadoc](docs.oracle.com/javase/7/docs/api/java/lang/, java.lang.Object...)) ), который дает ссылку на подробности - person Nandkumar Tekale; 09.10.2012
comment
@RohitJain: нужно ли %4s или %5s для приведенного выше вывода? - person Mohammad Faisal; 09.10.2012
comment
@MohammadFaisal.. Вы можете указать любое значение, которое может соответствовать вашей ширине.. Смотрите мое объяснение.. Если вы используете %4s для 12345, оно не будет соответствовать ширине 4.. - person Rohit Jain; 09.10.2012
comment
как я могу выровнять значение по центру или справа от экрана. - person Syed Danish Haider; 07.02.2019

В моем примере массив содержит строки символов разной длины, и из-за этого я не смог упорядочить строку, а другие строки разных массивов не совпадали на консоли. с другой концепцией я мог бы расположить эти массивы на консоли, мои коды приведены ниже.

package arrayformat;

 /**
 *
 * @author Sunil
 */
 public class ArrayFormat {



  /**
  * @param args the command line arguments
  */

  public static void main(String[] args) {

  int[] productId = new int[]  
 {1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,};
   String[] productName= new String[]{"Pepsi","kissan jam","Herbal 
 oil","Garnier man's","Lays chips","biscuits","Bournvita","Cadbury","Parker 
 Vector","Nescafe",};
   String[] productType = new String[]{"Cold Drink","Jam","Oil","Face 
 wash","chips","Biscuits","Health 
 Supplement","Chocolate","Stationary","Coffee",};
    float[] productPrice = new float[]{24,65,30,79,10,20,140,20,150,80,}; 


       int productNameMaxlength=0;
   int productTypeMaxlength=0;



    for (String productName1 : productName) {
        if (productNameMaxlength < productName1.length()) {
            productNameMaxlength = productName1.length();
        }
    }


    for (String productType1 : productType) {
        if (productTypeMaxlength < productType1.length()) {
            productTypeMaxlength = productType1.length();
        }
    }



   for(int i=0;i<productType.length;i++)

   { 
              System.out.print(i);

      System.out.print("\t");

              System.out.print(productId[i]);

              System.out.print("\t");

              System.out.print(productName[i]);

       for(int j=0;j<=productNameMaxlength-productName[i].length
     ();j++)

       {

        System.out.print(" ");

       }

       System.out.print("\t");

       System.out.print(productType[i]);

       for(int j=0;j<=productTypeMaxlength-productType[i].length
    ();j++)

       {
           System.out.print(" ");
       }

               System.out.print("\t");

       System.out.println(productPrice[i]);
          }           
      }

    }
   and output is--
  Sr.No  ID     NAME            TYPE               PRICE
   0    1001    Cadbury         Chocolate           20.0
   1    1002    Parker Vector   Stationary          150.0
   2    1003    Nescafe         Coffee              80.0
   3    1004    kissan jam      Jam                 65.0
   4    1005    Herbal oil      Oil                 30.0
   5    1006    Garnier man's   Face wash           79.0
   6    1007    Lays chips      chips               10.0
   7    1008    biscuits        Biscuits            20.0
   8    1009    Bournvita       Health Supplement   140.0
   9    1010    Pepsi           Cold Drink          24.0

Поскольку я не могу ответить на свой вопрос, когда я задал свой вопрос из-за блока, чтобы задать вопрос и ответить, я цитирую свой ответ, и я чувствую, что это другой формат массива.

person Sunil Bhagwat    schedule 16.07.2015
comment
Это не дает ответа на вопрос. Чтобы подвергнуть критике или запросить разъяснения у автора, оставьте комментарий под его сообщением — вы всегда можете прокомментировать свои собственные сообщения, и как только у вас будет достаточно репутация, вы сможете комментировать любой пост. - person AlBlue; 17.07.2015
comment
Поскольку я не могу ответить на свой вопрос, когда я задал свой вопрос из-за блока, чтобы задать вопрос и ответить, я цитирую свой ответ, и я чувствую, что это другой формат массива. - person Sunil Bhagwat; 17.07.2015

Форматирование вывода можно выполнить с помощью метода System.out.format("",""). Этот метод содержит два входных параметра, первый из которых определяет стиль форматирования, а второй определяет значение для печати. Предположим, вы хотите выровнять n-значное значение по правому краю. вы передадите первый параметр "%4d".

Для выравнивания по левому краю используйте -ve %-nd

Для выравнивания по правому краю используйте +ve %nd

 for(int i=1; i<13; i++){
       for(int j=1; j<13; j++){
            System.out.format("%4d", i * j);  //each number formatted to a width of 4 so use %4d in the format method.
    }
    System.out.println();  // To move to the next line.
}
person Prabhat Yadav    schedule 09.08.2016