2013-07-26 6 views
11

Nie mam wątpliwości, że brakuje tu czegoś naprawdę oczywistego, ale nie mogę tego rozgryźć. Każda pomoc będzie doceniona. Pomyłka pochodzi tutaj:Wyjątek w wątku "główny" java.util.MissingFormatArgumentException: Specyfikator formatu "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; 
    } 
} 
+0

Błąd jest inny niż gdzie indziej. gdzie jest twoja główna metoda? –

+1

Nie, jest tam w 'toString()'. Przekazano tylko dwa parametry ... –

Odpowiedz

28

Twój format string "%-20s%10.2s%10s" przyjmuje trzy parametry:

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

ale tylko dostarczają dwa parametry:

  1. this.name
  2. this.banner

Komunikat o błędzie wskazuje, że trzeci parametr (dla %10s) brakuje.

Dostosuj ciąg formatu lub dodaj trzeci parametr.

1

Trzeba dodać argument do metody format, ponieważ sformatowany ciąg czeka na 3 argumenty, a nie dwa.

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

myślę, że trzeba przejść kolejny argument, ponieważ przechodzą tylko imię i sztandar, ale w ciągu masz 3 razy% .. spróbuj sama tylko% -20s% 10.2s

3

You posiadają:

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

Skoro masz trzy %s w swojej String, format() spodziewa trzy paramteres, ale tylko zdać this.name i this.banner.

Ponadto, skoro jesteś wewnątrz Student, robisz nie potrzebę korzystania this. Możesz po prostu odwoływać się do nich przez name i banner.