web-dev-qa-db-ja.com

スレッド「メイン」の例外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;
    }
}
12
user2343208

フォーマット文字列"%-20s%10.2s%10s"は3つのパラメータを取ります。

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

ただし、2つのパラメーターのみを指定します。

  1. this.name
  2. this.banner

エラーメッセージには、3番目のパラメータ(%10s) 不足している。

したがって、フォーマット文字列を調整するか、3番目のパラメータを追加します。

30
Uwe Plonus

あなたが持っている:

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

Stringに3つの_%s_があるため、format()は3つのパラメーターを期待しますが、_this.name_および_this.banner_のみを渡します。

また、あなたはStudentの中にいるので、notを使用する必要がありますthisを使用する必要があります。単にnamebannerで参照できます。

3
Steve P.

formatメソッドに引数を追加する必要があります。フォーマットされた文字列は2つではなく3つの引数を待機するためです。

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

名前とバナーのみを渡すが、文字列には%の3倍があるので、別の引数を渡す必要があると思います。%-20s%10.2sだけで同じことを試してください

0
Deckard27