Search code examples
javaprintfbluejincompatibletypeerror

Printf formatting error incompatible types


I keep getting this error saying incompatible types: java.io.PrintStream cannot be converted to java.lang.String and I don't get how to get it to work for my toString Method. I've tried assigning it to a variable and then returning it, and then just plan printing it out as a return statement, I don't see anything wrong with my printf formatting. Help is appreciated.

 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;
        }
    }  

Solution

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

    You are trying to return PrintStream. That is not correct caause the toString should return a String.

    You should have used String#format method, which gives back a String after fomratting

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