0

ユーザーに 3 つのアイテム、その数量、および価格を入力するよう求める単純なプログラムを作成しようとしています。プログラムは、項目名にスペースを含めることを許可する必要があります。ここに私がこれまでに書いた私のコードがあります。

   import java.util.Scanner;
   public class AssignmentOne {

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 = kb.nextInt();
    System.out.println("Please enter in the price of your item");
    double price = kb.nextDouble();




    //process for item two
    System.out.println("\nPlease enter in your second item");
    String item2 = kb.nextLine();
    System.out.println("\nPlease enter the quantity for this item");
    int quantity2 = kb.nextInt();
    System.out.print("\nPlease enter in the price of your item");
    double price2 = kb.nextDouble();
    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("\nPlease enter in your third item");
    String item3 = kb.nextLine();
    System.out.println("Please enter the quantity for this item");
    int quantity3 = kb.nextInt();
    System.out.println("Please enter in the price of your item");
    double price3 = kb.nextDouble();
    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%30s", item);
    System.out.printf("%30d", quantity);
    System.out.printf("\n%30s", item2);
    System.out.printf("\n%30s", 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);



}

}

私の問題は、 String item = kb. nextLine(); を使用しているときです。項目を入力するときのこのプロセスの例を次に示します

   Please enter in your first item
   soda

   Please enter the quantity for this item
   10

   Please enter the price for this item
   15

   Please enter in your second item
   Please enter the quantity for this item

この時点で、最初の項目は問題ありませんが、2 番目の項目になると、2 番目の項目行が自動的に入力され、数量に直接移動します。この問題を解決する方法がわかりません。nextLine() を使用する必要があります。 ; そのため、項目名にスペースを含めることができます。助けてください。

4

5 に答える 5

1

このコードを試してください

  import java.util.Scanner;
  class AssignmentOne {

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("\nPlease enter in your second item");
    String item2 = kb.nextLine();
    System.out.println("\nPlease enter the quantity for this item");
    int quantity2 = Integer.parseInt(kb.nextLine());
    System.out.print("\nPlease 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("\nPlease 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%30s", item);
    System.out.printf("%30d", quantity);
    System.out.printf("\n%30s", item2);
    System.out.printf("\n%30s", 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);



}
}
于 2013-01-19T09:10:26.790 に答える
1

を使用しているためSystem.in、「Enter」を押すまでスキャナには何も送信されません。つまり、「Enter」を押さずに「15」と入力すると、kb.nextDouble();呼び出しがブロックされます。「Enter」をkb.nextDouble();押すと「15」と表示されますが、スキャナのバッファにはまだ改行があります。つまり、コードの次の部分です。

//process for item two
System.out.println("\nPlease enter in your second item");
String item2 = kb.nextLine();

「15」と入力してから「Enter」を押すと、バッファーにあった改行が即座に読み取られます。そのため、アイテム名を読み取ろうとしません。

以下からすべてのアイテム名スキャンを置き換えることができます。

//process for item two
System.out.println("\nPlease enter in your second item");
String item2 = kb.nextLine();

に:

//process for item two
System.out.println("\nPlease enter in your second item");
String item2 = kb.next();

または、価格をスキャンするときに改行を読み取り、ダブルを解析します。

System.out.println("Please enter in the price of your item");
double price = Double.parseDouble(kb.nextLine());
于 2013-01-19T09:11:35.650 に答える
0

文字列と数値を取得するために別のスキャナ オブジェクトを使用します。これで問題は解決します。

于 2013-01-19T09:35:15.857 に答える
0
kb.nextDouble();

確認する必要がありnextDoubleますが、改行がそのまま残っている可能性が高いようです。これは、結果の `nextLine によって入力されます。

于 2013-01-19T08:58:23.893 に答える
0

この問題は、次の 2 つの方法で解決できます。

  • .nextLine()コード内でに置き換え.next()ます。(ただし、これを行うと、文字列にスペースを含めることはできません。

  • プリミティブを読み取ってからテキストを読み取る場合は、その後に別のテキストを追加.nextLine();します。

あなたのケースで2番目の方法を使用すると、次のようになります。

System.out.println("Please enter in the price of your item");
double price = kb.nextDouble();

String item2 = kb.nextLine(); // -------------> Added this line also here
//process for item two
System.out.println("\nPlease enter in your second item");
item2 = kb.nextLine(); 

これにより、最初の問題が解決されます。他のすべての場所でも同じようにすると、プログラムは想定どおりに実行されます。

于 2013-01-19T09:09:06.417 に答える