我有格式问题

时间:2015-04-14 21:09:23

标签: java formatting printf

我希望我的程序格式化为this

但是,它的格式如下:this, where the spacing is off

我有两个类,其中一个是getter one(Item),大部分代码都在这个(TestItem)

这是getter文件中的toString方法

    public String toString()
    {
        return " " + itemID + "\t" + itemName + "\t" + inStore + "\t" +  "$"  +     df.format(Price);//String.format("$%,1.2f", Price) +"\n" ;  
    }

在TestMovie中,Thses是重要的方法:

   public static void main (String [] args)
   {
       Item[] hardware = new Item[6];

      hardware[0]=new Item(1011,"Air Filters",200,10.5);
      hardware[1]=new Item(1034,"Door Knobs",60,21.5);
      hardware[2]=new Item(1101,"Hammers",90,9.99);
      hardware[3]=new Item(1600,"Levels",80,19.99);
       hardware[4]=new Item(1500,"Ceiling Fans",100,59);
       hardware[5]=new Item(1201,"Wrench Sets",55,80);

       System.out.println("Original Array:");
      System.out.println();
      printInventory(hardware);
      System.out.println();

并且此方法遍历数组

     public static void printInventory(Item[] hardware) //traverse and print
   {
       System.out.printf("itemID\titemName\tinStore\tprice\n"); 

  System.out.println("--------------------------------------------------------"); 
        for(Item print : hardware)
       {
            for (int i = 0; i < 1; i++)
            {
               //System.out.println(hardware[i]);
              System.out.printf(print.getItemID() + "\t" + print.getItemName() + "\t" + print.getInStore() + "\t$" + print.getPrice()); //format 
           }
           System.out.println();
       }
      }

程序运行没有错误,它只是没有按照我希望的方式格式化。我需要在我的程序中实现printf函数。我比标题更担心这些项目。

3 个答案:

答案 0 :(得分:1)

正如已经提议的那样,使用格式模式而不是TAB字符printf()。然后您的printInventory()看起来像

public static void printInventory(Item[] hardware) {
    System.out.printf("%-10s  %-20s  %-10s  %-10s%n",
            "itemID",
            "itemName",
            "inStore",
            "price"
    );

    System.out.println("--------------------------------------------------------");

    for (Item print : hardware) {
        System.out.printf("%-10s  %-20s  %-10s  $%,.2f%n",
                print.getItemID(),
                print.getItemName(),
                print.getInStore(),
                print.getPrice()
        );
    }
}

需要进行一些微调。但你应该已经了解了全局。

答案 1 :(得分:0)

在第一行

System.out.println("itemID       itemName        inStore      price      "); 

您还必须使用带有表格的printf,并且没有空格来获得相同的缩进。

答案 2 :(得分:0)

在标题中添加标签:

System.out.printf("itemID\titemName\tinStore\tprice\t");

将有助于按顺序获得第一列。第二个问题是标题栏中文本的长度,它会推动您的格式化。快速修复将添加更多选项卡。但这可能不适用于短标题或更长标题。

如上所述,最好使用Formatter