2016-10-17 5 views
1

Ein wenig Probleme in Java hier mit meiner Printf-Anweisung. Mein Code funktioniert einwandfrei, da ich ihn mit println getestet habe, muss ich nur meinen Abstand korrigieren, weshalb ich printf verwenden muss. Ich habe viele Möglichkeiten versucht, meine Strings und Variablen zu trennen und zu trennen. Ich denke, ein Teil des Problems ist, dass ich das "$" verwenden muss, und das ist mit der printf-Anweisung unordentlich. Dies ist Teil eines Schulprojektes, deshalb muss ich printf benutzen, anstatt nur eine Druckanweisung zu machen. Mein Code ist wie folgtPrintf Probleme in Java

for(double ten = 10.00; ten < 15.00; ten = ten + .75){ 
     /** 
     * We use the variable tip to calculate a %20 tip and we use the 
     * variable totalWithTip to calculate the total of the dinner price 
     * and the tip added together. 
     */ 
     double tip = ten * .2; 
     double totalWithTip = ten + tip; 

     System.out.printf("$%7s%4.2d$%13s%4.2d$%13s%4.2d\n", ten, tip, totalWithTip); 
    } 

Ich brauche die Ausgabe aussehen

Dinner Price   20% tip   Total 
--------------------------------------------------- 
     $10.00   $ 2.00   $12.00 
     $10.75   $ 2.15   $12.90 
     $11.50   $ 2.30   $13.80 
     $12.25   $ 2.45   $14.70 
     $13.00   $ 2.60   $15.60 
     $13.75   $ 2.75   $16.50 
     $14.50   $ 2.90   $17.40 
+0

https://www.cs.colostate.edu/~cs160/.Summer16/resources/Java_printf_method_quick_reference.pdf – jordaniac89

Antwort

2

In Ihrem Fall könnte dies eine Lösung sein:

System.out.printf("%7s$%4.2f%13s$ %4.2f%13s$%4.2f\n"," ", ten, " ", tip, " ", totalWithTip); 

In Ihrem Beispiel wurden die Räume nach Daten setzen. Außerdem benötigen Sie nur% f für ein double (oder float), wobei .2 die Dezimalstellen angibt.

+0

Vielen Dank! das ist super nah !!! Ich denke, ich muss noch eins hinzufügen "" vor zehn mit etwas Abstand, ich werde es gleich versuchen und dich wissen lassen! –

+1

Code Dumps ohne Erklärung sind schlechte Antworten. Eine gute Antwort erklärt den Fehler und wie und warum Sie ihn korrigiert haben. – VGR

+0

Großer Fang! Ich habe sie zu einer einzigen Zeile zusammengefasst. –

3
System.out.printf("$%.2f $%.2f $%.2f \n", ten, tip, totalWithTip); 

Sie müssen nur% f für eine doppelte (oder schwimmen), mit dem 0,2 die Dezimalstellen Angabe .

Für die Leerzeichen verwenden Sie das Zeichen "c", dem die Anzahl der Leerzeichen vorangestellt ist. Z.B. % 6c druckt 6 Zeichen.

System.out.printf("$%.2f%6c$%.2f%6c$%.2f\n", ten, ' ', tip,' ',totalWithTip); 
+1

Danke, das löst mein Dezimalproblem, aber das löst nicht mein Abstandsproblem! Sollte ich ein% 6d vor dem ersten hinzufügen, um die sechs Leerzeichen zu bekommen? –

+0

Überprüfen Sie die geänderte Antwort – dahui

+0

Frage aber, wie füge ich den Platz für die mittlere Spalte hinzu? Die $ 2,00 haben ein Leerzeichen zwischen der Zahl und dem Dollarzeichen. –

2

Eine weitere Alternative:

System.out.printf("%7s$%-13.2f$%-13.2f$%-13.2f\n", " ", ten, tip, totalWithTip); 

Das ‚-‘ richtet die Ausgabe des Parameters auf der linken Seite und fügt Füllzeichen nach rechts.