Java UnknownFormatConversionException

Код ниже порождает эту ошибку, и я не уверен, почему. Очевидно, что проблема с выводом String.format в переменную str, но я не знаю, что с ней не так.

Exception in thread "main" java.util.UnknownFormatConversionException: Conversion = 'i'
    at java.util.Formatter$FormatSpecifier.conversion(Unknown Source)
    at java.util.Formatter$FormatSpecifier.<init>(Unknown Source)
    at java.util.Formatter.parse(Unknown Source)
    at java.util.Formatter.format(Unknown Source)
    at java.util.Formatter.format(Unknown Source)
    at java.lang.String.format(Unknown Source)
    at Donor.toString(Donor.java:41)
    at Donor.main(Donor.java:65)

-

import java.util.Scanner;

public class Donor {

    public String name;
    public int age;
    public double donation;

    Donor() {

        //Initialized to these values for debugging
        name = "NoName";
        age = 0;
        donation = 0;

    }

    Donor(String nameinit, int ageinit, double donationinit) {

        name = nameinit;
        age = ageinit;
        donation = donationinit;

    }

    public String toString() {

        String str = "";

        str = String.format("%s-30%i-6$%d-20", name, age, donation);

        return str;

    }

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        String nameinit = null;
        int ageinit = -1;
        double donationinit = -1;
        String outp = null;

        System.out.print("Enter the donor name: ");
        nameinit = input.nextLine();

        System.out.print("Enter the donor age: ");
        ageinit = input.nextInt();

        System.out.print("Enter the donation amount: ");
        donationinit = input.nextDouble();

        Donor d = new Donor(nameinit, ageinit, donationinit);
        outp = d.toString();

        System.out.printf("%s30 %s6 %s10", "Name", "Age", "Donation");
        System.out.print("\n" + outp);

        input.close();

    }

}

Ответ 1

Используйте d для int вместо i и f и для double вместо d в следующей строке

str = String.format("%s-30%i-6$%d-20", name, age, donation); 

Здесь вы можете прочитать о синтаксисе форматирования http://docs.oracle.com/javase/6/docs/api/java/util/Formatter.html.