我有格式问题

I am having formatting issues

我希望我的程序能够很好地格式化为

但是,它的格式如下:

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

这是 getter 文件中的 toString 方法

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

而在TestMovie中,这些是重要的方法:

   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 函数。我更担心的是项目,而不是 header。

在你的第一行

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

您还必须将 printf 与制表一起使用,而不是 space 以获得相同的缩进。

正如已经建议的那样,使用 printf() 格式模式而不是 TAB 字符。那么你的 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()
        );
    }
}

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

正在为您的 header 添加标签:

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

将有助于整理第一列。您的第二个问题是标题列中文本的长度,这会影响您的格式设置。快速解决方法是添加更多选项卡。但这可能不适用于较短或较长的标题。

如前所述,最好使用 Formatter class