【问题标题】:System.out.print-method doesn´t work rightSystem.out.print-method 无法正常工作
【发布时间】:2011-11-12 07:46:00
【问题描述】:

我正在一本名为“Java,如何编程”的书中做练习。我创建了一个包含 2 个类的小程序。该程序应该被一家五金店用来代表售出物品的发票。它应该包含 4 条信息:商品编号的字符串值、描述产品的字符串值、售出商品数量的 int 值和商品价格的 double 值。我在包含主要方法的类中创建了该类的 2 个对象。我应该对每个实例变量使用“set and get-methods”。

问题在于,当程序提示用户写入变量的值时,它不会读取变量“第二项编号”的第一个值(命令窗口副本中的第 5 行)。我真的无法在代码中阅读为什么会发生这种情况。谁能帮帮我?

两个类的代码如下:

public class aInvoice
    {
    private String number;
    private String description;
    private int quantity;
    private double price;

    public aInvoice(String pNumber, String pDescription, int pQuantity, double pPrice)
        {
        number = pNumber;
        description = pDescription;
        if (pQuantity < 0)
        {quantity = 0;}
        else
        {quantity = pQuantity;}
        if (pPrice < 0)
        {price = 0;}
        else
        {price = pPrice;}
        }

    public String getNumber()
        {
        return number;
        }
    public String getDescription()
        {
        return description;
        }
    public int getQuantity()
        {
        return quantity;
        }
    public double getPrice()
        {
        return price;
        }

    double totalAmount;
    public double getaInvoiceTotalAmount()
        {
        return quantity * price;
        }
    }

和:

    import java.util.Scanner;
    public class aInvoiceTest
    {
    public static void main(String[]args)
        {
        String partNumber1 = null;
        String partDescription1 = null;
        int partQuantity1 = 0;
        double partPrice1 = 0.0;
        String partNumber2 = null;
        String partDescription2 = null;
        int partQuantity2 = 0;
        double partPrice2 = 0.0;

        Scanner input = new Scanner (System.in);
        System.out.print( "Enter first items number: ");
        partNumber1 = input.nextLine();
        System.out.print( "Enter description: ");
        partDescription1 = input.nextLine();
        System.out.print( "Enter quantity: ");
        partQuantity1 = input.nextInt();
        System.out.print( "Enter price: $");
        partPrice1 = input.nextDouble();
        System.out.print( "Enter second items number: ");
        partNumber2 = input.nextLine();    
        System.out.print( "Enter description: ");
        partDescription2 = input.nextLine();
        System.out.print( "Enter quantity: ");
        partQuantity2 = input.nextInt();
        System.out.print( "Enter price: $");
        partPrice2 = input.nextDouble();

        aInvoice aInvoice1 = new aInvoice(partNumber1, partDescription1, partQuantity1, partPrice1);
        aInvoice aInvoice2 = new aInvoice(partNumber2, partDescription2, partQuantity2, partPrice2);

        System.out.printf( "\n\nPart 1´s item number: %s\nItem description: %s\nQuantity: %d\nPrice each: $ %.2f\n\n", aInvoice1.getNumber(), aInvoice1.getDescription(), aInvoice1.getQuantity(), aInvoice1.getPrice () );

         System.out.printf( "\n\nPart 2´s item number: %s\nItem description: %s\nQuantity: %d\nPrice each: $ %.2f\n\n", aInvoice2.getNumber(), aInvoice2.getDescription(), aInvoice2.getQuantity(), aInvoice2.getPrice () );

        System.out.printf( "Total amount: $ %.2f\n\n", (aInvoice1.getaInvoiceTotalAmount() + aInvoice2.getaInvoiceTotalAmount()));
        }
    }

命令窗口中的读数是:

输入第一个项目编号:44 输入描述:pc 输入数量:1 输入价格:$10 输入第二个项目编号:输入描述:电话 输入数量:1 输入价格:100 美元

第 1 部分的项目编号:44 商品描述:电脑 数量:1 单价:10.00 美元

第 2 部分的项目编号: 商品描述:电话 数量:1 每个价格:100.00 美元

总金额:$ 110.00

【问题讨论】:

    标签: java


    【解决方案1】:

    基本上,问题在于当您调用 nextInt/nextDouble 时,这些函数仅获取输入流中实际存在的数字部分。他们不会读取按“回车”键的回车字符。只需在每个 input.nextInt() 之后添加一个 input.nextLine(); 等即可。

    这似乎是您看到的问题:Using scanner.nextLine()

    【讨论】:

      【解决方案2】:

      这是因为在您使用 input.nextInt() 或 input.nextDouble() 读取输入后,您需要在尝试读取另一个字符串之前清除缓冲区。

      当用户输入 5.0 时,从输入缓冲区中取出 5.0,但留下回车符。您可以输入一个 input.nextLine() ,这将为您清除回车。

      所以你的代码应该看起来像

          System.out.print( "Enter price: $");
          partPrice1 = input.nextDouble();
      
          input.nextLine();
      
          System.out.print( "Enter second items number: ");
          partNumber2 = input.nextLine();    
          System.out.print( "Enter description: ");
          partDescription2 = input.nextLine();
          System.out.print( "Enter quantity: ");
          partQuantity2 = input.nextInt();
          System.out.print( "Enter price: $");
          partPrice2 = input.nextDouble();
      

      【讨论】:

      • 很高兴为您工作。请确保在您的问题上标记为答案,以便人们得到回答:)。我看到你没有在你的问题上标记任何答案。谢谢。
      猜你喜欢
      • 2020-06-30
      • 2016-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-01
      • 2012-07-11
      • 2018-04-08
      • 2017-04-20
      相关资源
      最近更新 更多