Comment faire pour utiliser des chaînes de caractères.format en java 8?


Aujourd'hui, j'ai écrit un programme simple dans eclipse Kepler en java 8. En fait, je l'ai copié à partir d'un tutoriel vidéo. Dans ce tutoriel, il a fonctionné, mais dans mon ordinateur, ce n'est pas le cas. La ligne d'erreur est

 String.format("%02d:%02d:%02d",hour,minute,second);

Je ne comprends pas quelle est l'erreur ici. Il met en évidence la méthode format(String,object[]) dans le type String ne sont pas applicables pour le argument(String, int, int, int)

public class Demo {

private int hour;
    private int second;
    private int minute;

    public void setTime(int h,int m,int s){
        hour=((h>=0 && h<24)?h:0);
        minute=((m>=0 && m<60)?m:0);
        second=((s>=0 && s<60)?s:0);
    }

    public String railwayTime(){
        return String.format("%02d:%02d:%02d",hour,minute,second);//error in this line
    }

    public String regular(){
        return String.format("%02d:%02d:%02d %s",((hour==0 ||hour==24)?12:(hour%12)), minute, second, (hour>=12)?"AM":"PM");//error in this line
    }
}

public class ShowTime {
    public static void main(String[] args){
        Demo d=new Demo();
        System.out.println(d.railwayTime());
        System.out.println(d.regular());
    }
}
Author: Tom, 2015-05-25

2 answers

L'exception vous demande un tableau à la place des chaînes séparées par des virgules:

// incorrect
String.format("%02d:%02d:%02d",hour,minute,second);

// fast but correct
Object[] data = { hour, minute, second };
String.format("%02d:%02d:%02d", data);

, Mais en fait, la méthode format(String,object[]) n'existe pas dans String, c'est: format(String pattern, Object... arguments) ce qui doit travailler avec des virgules ,. Il y a quelque chose avec votre syntaxe, mais pas dans le code.

 5
Author: Jordi Castilla, 2015-05-25 15:22:35

Une vraie réponse à ce problème est seulement votre type int. Vous n'avez pas besoin d'utiliser Object spécifiquement, mais vous devez utiliser un type qui hérite d'Object et int est un type brut qui n'hérite pas d'Object, comme tous les types raw. Vous pouvez donc utiliser Integer au lieu de int pour résoudre votre problème.

 1
Author: Mathan, 2015-12-29 15:12:38