printf integer formatting

sserio

Bekanntes Mitglied
Java:
double startTime = System.currentTimeMillis();
        printArray(array());
        System.out.println(findBiggestDiagonalSum(array()));
        double endTime = System.currentTimeMillis();
        System.out.printf(" %.3f " + ((endTime - startTime) / 1000)); // seconds
Weiß irgendwer warum das nicht funktioniert? die zahl ist 0.042 / 0.041 ... wird diese als dezimalzahl angesehen ?
 
Java:
double startTime = System.currentTimeMillis();
        printArray(array());
        System.out.println(findBiggestDiagonalSum(array()));
        double endTime = System.currentTimeMillis();
        System.out.printf(" %.3f " + ((endTime - startTime) / 1000)); // seconds
Weiß irgendwer warum das nicht funktioniert? die zahl ist 0.042 / 0.041 ... wird diese als dezimalzahl angesehen ?
Ich versuche millisekunden in sekunden umzurechnen
 
Die Methode `printf` auf dem PrintStream: https://docs.oracle.com/en/java/jav...#printf(java.lang.String,java.lang.Object...)
erwartet einen Format-String und Argumente, die auf im Format-String angegebene positionale Argumente (die Dinger mit dem Prozentzeichen) mappen.
Aktuell gibst du aber der Methode nur einen Format-String und keine weiteren Argumente.
Ändere das zu:
Java:
System.out.printf("%.3f",  (endTime - startTime) / 1000); // seconds
 
Die Methode `printf` auf dem PrintStream: https://docs.oracle.com/en/java/jav...#printf(java.lang.String,java.lang.Object...)
erwartet einen Format-String und Argumente, die auf im Format-String angegebene positionale Argumente (die Dinger mit dem Prozentzeichen) mappen.
Aktuell gibst du aber der Methode nur einen Format-String und keine weiteren Argumente.
Ändere das zu:
Java:
System.out.printf("%.3f",  (endTime - startTime) / 1000); // seconds
Also hat es einfach nur wegen der einen Klammer nicht funktioniert
 
Die Methode `printf` auf dem PrintStream: https://docs.oracle.com/en/java/jav...#printf(java.lang.String,java.lang.Object...)
erwartet einen Format-String und Argumente, die auf im Format-String angegebene positionale Argumente (die Dinger mit dem Prozentzeichen) mappen.
Aktuell gibst du aber der Methode nur einen Format-String und keine weiteren Argumente.
Ändere das zu:
Java:
System.out.printf("%.3f",  (endTime - startTime) / 1000); // seconds
wie mache ich das wenn ich noch einen string dahinter hängen will
Java:
 System.out.printf("%.3f %s", "seconds",  (endTime - startTime) / 1000);
 
Naja, lapidar zu sagen "es hat nicht wegen des Kommas funktioniert" ist etwas zu oberflächlich.
Solange du verstehst, dass dieses Komma eben das Format-String-Argument vom eigentlichen Argument (für das "%.3f") im Aufruf der printf() Methode voneinander trennt, weil du - wie gesagt - für jedes Format-Argument im Format-String auch ein Argument des Methodenaufrufes brauchst - dann ja.
 
wie mache ich das wenn ich noch einen string dahinter hängen will
Java:
 System.out.printf("%.3f %s", "seconds",  (endTime - startTime) / 1000);
Java:
System.out.printf("%.3f seconds",  (endTime - startTime) / 1000);
Es sind positionale Argumente. Also die Position des Arguments im Format-String und die des printf() Methodenaufrufes müssen übereinstimmen.
 
Es gibt auch noch die Möglichkeit, im format String zu sagen, den wie vielten Parameter du verwenden willst. Damit kannst du den selben Parameter auch öfters verwenden.
In diesem Beispiel wird die 4 (zweiter Parameter, angesprochen über 2$) an erster, zweiter und vierter Stelle eingefügt (jeweils anders formatiert), der Text (erster Parameter, angesprochen über 1$) wird an die zweite Stelle eingefügt.
Java:
System.out.printf("%2$03d %1$s %2$d ergibt das Gleiche wie 2 x %2$02d%n", "plus", 4);
Bei simplen zusammengesetzten Texten ist es aber meist angenehmer, einfach die Reihenfolge einzuhalten.
 
Java:
 for (Integer n : getDivisors(16)) { //getDivisors(16) == HashSet
            System.out.printf("%d ", n);
        }
gibt es eine andere Möglichkeit HashSets zu printen mit printf
 
Es gibt auch noch die Möglichkeit, im format String zu sagen, den wie vielten Parameter du verwenden willst. Damit kannst du den selben Parameter auch öfters verwenden.
In diesem Beispiel wird die 4 (zweiter Parameter, angesprochen über 2$) an erster, zweiter und vierter Stelle eingefügt (jeweils anders formatiert), der Text (erster Parameter, angesprochen über 1$) wird an die zweite Stelle eingefügt.
Java:
System.out.printf("%2$03d %1$s %2$d ergibt das Gleiche wie 2 x %2$02d%n", "plus", 4);
Bei simplen zusammengesetzten Texten ist es aber meist angenehmer, einfach die Reihenfolge einzuhalten.
was bedeutet das %n am ende bei %2$02d%n .Also es ist ja an zweiter stelle eine dezimal zahl auf 2 vorstellen ausgeben und dann dieses %n
 
Java:
 for (Integer n : getDivisors(16)) { //getDivisors(16) == HashSet
            System.out.printf("%d ", n);
        }
gibt es eine andere Möglichkeit HashSets zu printen mit printf

mit einer Methodenreferenz in etwa so (Java 8)


Java:
Set<Integer> set = new HashSet<Integer>();
set.add(10);
set.add(1);

set.forEach(System.out::println);
Java:
getDivisors(16).forEach(System.out::println);
 
Zuletzt bearbeitet:
mit einer Methodenreferenz in etwa so (Java 8)


Java:
Set<Integer> set = new HashSet<Integer>();
set.add(10);
set.add(1);

set.forEach(System.out::println);
Java:
getDivisors(16).forEach(System.out::println);
alles klar danke, aber der gibt das dann untereinander aus / oder mit print() nebeneinander , jedoch ohne lücken. Aber dennoch ne gute methode
 

Zurück
Oben