Printf格式错误不兼容的类型

时间:2017-04-25 07:58:11

标签: java printf bluej incompatibletypeerror

我不断收到此错误,说明不兼容的类型:java.io.PrintStream cannot be converted to java.lang.String我并不知道如何让它为我的toString方法工作。我已经尝试将其分配给变量然后将其返回,然后只计划将其打印为return语句,我没有看到我的printf格式有什么问题。感谢帮助。

 import java.text.NumberFormat;

    public class Item
    {
        private String name;
        private double price;
        private int quantity;


        // -------------------------------------------------------
        //  Create a new item with the given attributes.
        // -------------------------------------------------------
        public Item (String itemName, double itemPrice, int numPurchased)
        {
        name = itemName;
        price = itemPrice;
        quantity = numPurchased;
        }


        // -------------------------------------------------------
        //   Return a string with the information about the item
        // -------------------------------------------------------
        public String toString ()
        {

        return System.out.printf("%-15s $%-8.2f %-11d $%-8.2f", name, price, 
     quantity, price*quantity);
        }

        // -------------------------------------------------
        //   Returns the unit price of the item
        // -------------------------------------------------
        public double getPrice()
        {
        return price;
        }

        // -------------------------------------------------
        //   Returns the name of the item
        // -------------------------------------------------
        public String getName()
        {
        return name;
        }

        // -------------------------------------------------
        //   Returns the quantity of the item
        // -------------------------------------------------
        public int getQuantity()
        {
        return quantity;
        }
    }  

4 个答案:

答案 0 :(得分:1)

System.out.printf不返回字符串,您正在寻找String.format

public String toString () {
    return String.format("%-15s $%-8.2f %-11d $%-8.2f", name, price, quantity, price*quantity);
}

答案 1 :(得分:1)

 return System.out.printf("%-15s $%-8.2f %-11d $%-8.2f", name, price, 
     quantity, price*quantity);

您正在尝试返回PrintStream。这是不正确的,因为toString应该返回一个String。

你应该使用String#format方法,在fomratting之后返回一个字符串

return String.format("%-15s $%-8.2f %-11d $%-8.2f", name, price, 
         quantity, price*quantity);

答案 2 :(得分:1)

更改

 System.out.printf("%-15s $%-8.2f %-11d $%-8.2f", name, price, 
 quantity, price*quantity);

 String.format("%-15s $%-8.2f %-11d $%-8.2f", name, price, 
 quantity, price*quantity);

因为System.out.println()用于将字符串打印到控制台。不要创建格式化字符串 -

答案 3 :(得分:1)

错误是由

引起的
return System.out.printf(....)

如果你真的想从这个方法返回一个String,那么试试

return String.format(....);