Исключение в потоке" main " java.утиль.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;
    }
}

4 ответов


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

  1. %-20s
  2. %10.2s
  3. %10s

но только двух параметров:

  1. this.name
  2. this.banner

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

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


у вас есть:

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

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

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


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


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

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