扫描仪输入不读取方法作为参数调用

时间:2011-08-23 03:00:37

标签: java

首先,这是代码:

产品信息:

public class ProductInformation
{
    public String code;
    public String itemName;
    public double price;
    //Constructor
    public ProductInformation()
    { itemName="-";
      code="-";
      price=0;}
    //Setter
    public void setItemName(String itemName)
    { this.itemName=itemName;}
    public void setCode(String code)
    { this.code=code;}
    public void setPrice(double price)
    { this.price=price;}
    //Getter
    public String getItemName()
    { return itemName;}
    public double getPrice()
    { return price;}
    public String getCode()
    { return code;}

    //Products
    public void getProduct(String code)
    {   if(code == "A001"){
            setCode("A001");
            setItemName("Mouse  ");
            setPrice(100);}
        else if(code == "A002"){
            setCode("A002");
            setItemName("Monitor    ");
            setPrice(2500);}
        else if(code == "A003"){
            setCode("A003");
            setItemName("Keyboard");
            setPrice(200);}
        else if(code == "A004"){
            setCode("A004");
            setItemName("Flash Disk");
            setPrice(300);}
        else if(code == "A005"){
            setCode("A005");
            setItemName("Hard Disk");
            setPrice(1500);}
            }
}

import java.util.*;

产品展示:

public class ProductDisplay
{   public ProductInformation product;
    public ProductDisplay()
    {
        System.out.println("\t\t\t\t  RG COMPUTER SHOP");
        System.out.println("\t\t\t\t    Makati City");
        System.out.println("\t\tP R O D U C T\tI N F O R M A T I O N");
        System.out.println("-------------------------------------------------------");
        System.out.println("\t\tCode\t\tDescription\t\tUnit Price");
        System.out.println("-------------------------------------------------------");
        product = new ProductInformation();
        product.getProduct("A001");
        display();
        product = new ProductInformation();
        product.getProduct("A002");
        display();
        product = new ProductInformation();
        product.getProduct("A003");
        display();
        product = new ProductInformation();
        product.getProduct("A004");
        display();
        product = new ProductInformation();
        product.getProduct("A005");
        display();
    }
    // Display Method
    public void display()
    {  System.out.println("\t\t" + product.getCode()
                        + "\t\t" + product.getItemName()
                        + "\t\t" + product.getPrice()); }
}

我的问题出现在PointOfSale中 我试图让买家通过输入产品代码来决定 进入getProduct后我得到的总是“A005”即使我输入“A001”或其他东西。我认为product.getProduct(代码)没有用。有人可以帮我解决这个问题所以我可以继续编写这个

脚本
import java.util.*;
public class PointOfSale extends ProductDisplay
{   
    public PointOfSale()
    {   System.out.print("\nPurchase Item(y/n)?");
        Scanner sc = new Scanner(System.in);
        String line = sc.nextLine();
        if("y".equalsIgnoreCase(line)){
        OpenOrder();
            }
    }
    //=============================================
    public void OpenOrder() // New Order
    {   ArrayList<String> ProductList = new ArrayList<String>();
        ProductList.add("A001");    ProductList.add("A002");
        ProductList.add("A003");    ProductList.add("A004");
        ProductList.add("A005");
        System.out.print("Select Product Code:");
        Scanner sc = new Scanner(System.in);
        String code = sc.next();
        if(ProductList.contains(code))
        { product.getProduct(code);
          display(); EnterQuantity();       }
        else System.out.print("Product Code is Invalid\n"); System.exit(0);}
    //==============================================
    public void EnterQuantity()  //Entering Quantity
    {
        try{
            System.out.print("Enter Quantity:");
            Scanner sc = new Scanner(System.in);
            int quantity = sc.nextInt();
            double amount = quantity * product.getPrice();
            System.out.print("Amount: " + amount);}
        catch (InputMismatchException nfe)
            {System.out.print("\nInvalid Entry: Input must be a Number.\n"); System.exit(0);}
    }
    // Main Method
    public static void main(String[] args)
    {   new PointOfSale(); }
}

2 个答案:

答案 0 :(得分:3)

您正在getProduct()方法中比较字符串是否相等。字符串是对象,因此您可能希望使用equals()方法:

public void getProduct(String code)
{   if(code.equals("A001")){
        setCode("A001");
        setItemName("Mouse  ");
        setPrice(100);}
    else if(code.equals("A002")){
        setCode("A002");
        setItemName("Monitor    ");
        setPrice(2500);}
    else if(code.equals("A003")){
        setCode("A003");
        setItemName("Keyboard");
        setPrice(200);}
    else if(code.equals("A004")){
        setCode("A004");
        setItemName("Flash Disk");
        setPrice(300);}
    else if(code.equals("A005")){
        setCode("A005");
        setItemName("Hard Disk");
        setPrice(1500);}
        }

答案 1 :(得分:1)

一个主要问题是您使用==比较字符串,并且您通常不应该这样做,因为这会比较一个对象引用是否与另一个对象引用相同而您不关心这一点。相反,你关心两个String变量是否包含相同的String表示,为此使用equals()或equalsIgnoreCase()方法。