2013-01-19 9 views
7

Sto provando a creare un semplice programma in cui includere tre elementi, le loro quantità e i prezzi e li ho aggiunti tutti insieme per creare un formato di tipo di ricevuta semplice. Il mio professore mi ha dato un formato specifico per la ricevuta in cui tutti i decimali si allineano e sono sistemati in modo coerente. Dovrebbe sembrare come questo.Come utilizzare correttamente la formattazione con printf in Java

Your Bill: 


Item       Quantity  Price   Total 
Diet Soda       10  1.25   12.50 
Candy        1   1.00   1.00 
Cheese        2   2.00   4.00 


Subtotal             17.50 
6.25% Sales Tax            1.09 
Total              18.59 

Il mio professore specificato deve contenere 30 caratteri per il nome, 10 per quantità, prezzo e totale. Facendo questo devo usare il metodo printf. Sto provando a formattarlo con questo codice finora.

import java.util.Scanner; 
class AssignmentOneTest { 

    public static void main(String[] args) { 
     Scanner kb = new Scanner(System.in); 

     // System.out.printf("$%4.2f for each %s ", price, item); 
     // System.out.printf("\nThe total is: $%4.2f ", total); 

     // process for item one 
     System.out.println("Please enter in your first item"); 
     String item = kb.nextLine(); 
     System.out.println("Please enter the quantity for this item"); 
     int quantity = Integer.parseInt(kb.nextLine()); 
     System.out.println("Please enter in the price of your item"); 
     double price = Double.parseDouble(kb.nextLine()); 

     // process for item two 
     System.out.println("Please enter in your second item"); 
     String item2 = kb.nextLine(); 
     System.out.println("Please enter the quantity for this item"); 
     int quantity2 = Integer.parseInt(kb.nextLine()); 
     System.out.print("Please enter in the price of your item"); 
     double price2 = Double.parseDouble(kb.nextLine()); 
     double total2 = quantity2 * price2; 
     // System.out.printf("$%4.2f for each %s ", price2, item2); 
     // System.out.printf("\nThe total is: $%4.2f ", total2); 

     // process for item three 
     System.out.println("Please enter in your third item"); 
     String item3 = kb.nextLine(); 
     System.out.println("Please enter the quantity for this item"); 
     int quantity3 = Integer.parseInt(kb.nextLine()); 
     System.out.println("Please enter in the price of your item"); 
     double price3 = Double.parseDouble(kb.nextLine()); 
     double total3 = quantity3 * price3; 
     // System.out.printf("$%4.2f for each %s ", price3, item3); 
     // System.out.printf("\nThe total is: $%4.2f ", total3); 

     double total = quantity * price; 

     double grandTotal = total + total2 + total3; 
     double salesTax = grandTotal * (.0625); 
     double grandTotalTaxed = grandTotal + salesTax; 

     String amount = "Quantity"; 
     String amount1 = "Price"; 
     String amount2 = "Total"; 
     String taxSign = "%"; 

     System.out.printf("\nYour bill: "); 
     System.out.printf("\n\nItem"); 
     System.out.printf("%30s", amount); 
     // System.out.printf("\n%s %25d %16.2f %11.2f", item, quantity, price, 
     // total); 
     // System.out.printf("\n%s %25d %16.2f %11.2f", item2,quantity2, price2, 
     // total2); 
     // System.out.printf("\n%s %25d %16.2f %11.2f", item3,quantity3, price3, 
     // total3); 

     System.out.printf("\n%s", item); 
     System.out.printf("%30d", quantity); 
     System.out.printf("\n%s", item2); 
     System.out.printf("\n%s", item3); 

     System.out.printf("\n\n\nSubtotal %47.2f", grandTotal); 
     System.out.printf("\n6.25 %s sales tax %39.2f", taxSign, salesTax); 
     System.out.printf("\nTotal %50.2f", grandTotalTaxed);  
    } 
} 

Se inserisco un nome oggetto più lungo, sposta la posizione di quantità, prezzo e totale. La mia domanda è, come faccio a impostare un punto di inizio impostato con una larghezza limitata utilizzando printf, per favore aiutatemi.

+0

Spero che questo vi darà qualche idea http://stackoverflow.com/questions/8609249/java-printff-string-only-output-formatting – Milan

risposta

11
System.out.printf("%1$-30s %2$10d %3$10.2f %4$10.2f", "Diet Soda", 10, 1.25, 12.50); 

stamperà la linea

Diet Soda        10  1.25  12.50 

La prima stringa passato al metodo printf è una serie di identificatori di formato che descrivono come vogliamo che il resto degli argomenti da stampare.

Gli specificatori di formato sopra hanno la sintassi %[index$][flags][width][.precision]conversion dove [] indica facoltativo.

% inizia un'espressione di formattazione.

[index]$ indica l'indice dell'argomento che si desidera formattare. Gli indici iniziano da 1.

- L'unico flag utilizzato sopra, allinea l'output a sinistra.

[width] indica il numero minimo di caratteri da stampare.

.[precision] In questo caso il numero di cifre da scrivere dopo il punto decimale, anche se questo varia a seconda delle conversioni.

[conversion] carattere (i) che indica come deve essere formattato l'argomento. d è per intero decimale, f è il formato decimale per i punti mobili, s non modifica la stringa nel nostro caso.

Maggiori informazioni si possono trovare here.

Problemi correlati