Исключение в потоке "main" java.util.MissingFormatArgumentException: спецификатор формата "10s"

Я, без сомнения, пропущу что-то действительно очевидное здесь, но я не могу понять это. Любая помощь будет оценена по достоинству. Ошибка исходит отсюда:

package B00166353_Grades;

public class Student{
    String name,banner;

    public Student(String name,String banner){
        this.name=name;
        this.banner=banner;
    }

    public String toString(){
        String productDetails=new String();
        productDetails+=String.format("%-20s%10.2s%10s",this.name,this.banner);
        return productDetails;
    }
}

Ответ 1

Строка формата "%-20s%10.2s%10s" принимает три параметра:

  • %-20s
  • %10.2s
  • %10s

но поставляются только два параметра:

  • this.name
  • this.banner

В сообщении об ошибке указано, что отсутствует третий параметр (для %10s).

Итак, либо отрегулируйте строку формата, либо добавьте третий параметр.

Ответ 2

У вас есть:

productDetails+=String.format("%-20s%10.2s%10s",this.name,this.banner);

Поскольку у вас есть три %s в String, format() ожидает три параметра, но вы пропускаете только this.name и this.banner.

Кроме того, поскольку вы находитесь внутри Student, вам нужно не использовать this. Вы можете просто ссылаться на них на name и banner.

Ответ 3

Вам нужно добавить аргумент к методу format, потому что ваша форматированная строка ожидает 3 аргумента, а не два.

Ответ 4

productDetails+=String.format("%-20s%10.2s%10s",this.name,this.banner);

Я думаю, что вы должны передать другой аргумент, потому что вы передаете только имя и баннер, но в строке у вас есть 3 раза%. Попробуйте то же самое только с% -20s% 10.2s