私は、3つのアイテム、それらの数量、および価格を取り、それらをすべて一緒に追加して単純なレシートタイプのフォーマットを作成する単純なプログラムを作成しようとしています。私の教授は、すべての小数が揃っていて一貫して配置されている領収書の特定の形式を教えてくれました。このようになります。
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
私の教授は、名前には30文字、数量と価格および合計には10文字を指定するように指定しました。これを行うには、printfメソッドを使用する必要があります。今のところ、このコードでフォーマットしようとしています。
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);
}
}
長いアイテム名を入力すると、数量と価格、合計の配置が移動します。私の質問は、printfを使用して、限られた幅の設定された開始点をどのように作成するかです。助けてください。
System.out.printf("%1$-30s %2$10d %3$10.2f %4$10.2f", "Diet Soda", 10, 1.25, 12.50);
行を印刷します
Diet Soda 10 1.25 12.50
printf
メソッドに渡される最初の文字列は、残りの引数をどのように出力するかを記述する一連のフォーマット指定子です。フォーマット指定子の周りに、(フォーマットされずに)印刷される他の文字を追加できます。
上記のフォーマット指定子の構文は次のとおりです。%[index$][flags][width][.precision]conversion
どこ []
はオプションを示します。
%
は、フォーマット式を開始します。
[index$]
は、フォーマットする引数のインデックスを示します。インデックスは1から始まります。上記のインデックスは実際には必要ありません。インデックスのない各フォーマット指定子には、1から数えて1つが割り当てられるためです。
[-]
上記で使用されている唯一のフラグは、出力を左揃えにします。
[width]
は、印刷される文字の最小数を示します。
[.precision]
この場合、小数点の後に書き込まれる桁数ですが、これは変換によって異なります。
conversion
文字は、引数のフォーマット方法を示します。 d
は10進整数、f
は浮動小数点の10進形式、s
は文字列を変更しません。
詳細はこちら こちら