为什么编译时我的数据会混淆?

时间:2011-03-28 04:04:27

标签: java arrays user-interface

我希望得到一些帮助。首先,当我编译时,我的产品编号和价格变得混乱。为什么?其次,为什么产品类型总是返回null?我还想结合所有的消息框,但我所做的每一次尝试都失败了。如果有人能引导我朝着正确的方向前进,我将不胜感激。这是我的代码:

主要

package inventory4;
import java.util.Scanner;
import java.util.Arrays; //Needed to include data for arrays
import javax.swing.JOptionPane; //JOptionPane import tool

public class RunApp
{
 public static void main(String[] args)
   {

  Scanner input = new Scanner(System.in);

  ItemDetails theItem = new ItemDetails();

  int number;
  String Name = "";
  String Type = "";

  String sNumber = JOptionPane.showInputDialog(null,"How many items are to be put into inventory count?:  ");
  number = Integer.parseInt(sNumber);

  ItemDetails[] inv = new ItemDetails[number];


  for (int count = 0; count < inv.length; ++count)
  {
     Name = JOptionPane.showInputDialog(null,"What is item " + (count + 1) + "'s name?");

     theItem.setName(Name);

     Type = JOptionPane.showInputDialog(null,"Enter " + Name + "'s product type");

     String spNumber = JOptionPane.showInputDialog(null,"Enter " + Name + "'s product number");
     double pNumber = Double.parseDouble(spNumber);
     theItem.setpNumber(pNumber);

     String sUnits = JOptionPane.showInputDialog(null,"How many " + Name + "s are there in inventory?");

     double Units = Double.parseDouble(sUnits);
     theItem.setUnits(Units);

     String sPrice = JOptionPane.showInputDialog(null,Name + "'s cost");
     double Price = Double.parseDouble(sPrice);
     theItem.setPrice(Price);


      inv[count] = new ItemDetails(Name, Price, Units, pNumber);

  }




  for (int i = 0; i < inv.length; ++i)
  {

     JOptionPane.showMessageDialog(null, "Product Name: " + inv[i].getName());
     //Why can't I use this instead of having multiple boxes?:
     //JOptionPane.showMessageDialog(null, "Product Name: \nProduct Type: \nProduct Number: \nUnits in Stock: \nPrice Per Unit: " + inv[i].getName() +  inv[i].getUniqueType() + inv[i].getpNumber() + inv[i].getUnits(), + inv[i].getPrice());

     JOptionPane.showMessageDialog(null, "Product Type: " +  inv[i].getUniqueType());

     JOptionPane.showMessageDialog(null, "Product Number: " + inv[i].getpNumber());

     JOptionPane.showMessageDialog(null, "Amount of Units in Stock: " + inv[i].getUnits());

     JOptionPane.showMessageDialog(null, "Price per Unit: " + inv[i].getPrice());

 JOptionPane.showMessageDialog(null, String.format("Total cost for %s in stock: $%.2f", inv[i].getName(), inv[i].calculateTotalPrice()));

     JOptionPane.showMessageDialog(null,String.format("Restocking fee for %s is $%.2f", inv[i].getName(), inv[i].calculateRestock()));

     String combinedData = inv[i].toString();

     if(i == (inv.length -1)){

        String lastItem = String.format("\nTotal Cost for all items entered: $%.2f\n", Items.getCombinedCost(inv));

        combinedData = combinedData + lastItem; //combine total value to the end of the last object output
        JOptionPane.showMessageDialog(null, combinedData);  //Show Message

     }else{
        JOptionPane.showMessageDialog(null, combinedData); //Show Message
     }


    } //end for


  } //end main


} //end class

package inventory4;


public class Items implements Comparable
{
   private String Name;
   public double pNumber, Units, Price;
   String allInfo;
   public Items()
   {
      Name = "";
      pNumber = 0.0;
      Units = 0.0;
      Price = 0.0;
   }

   public int compareTo(Object item)
   {

      Items tmp = (Items)item;

      return this.getName().compareTo(tmp.getName());
   } // end compareTo method


   public Items(String productName, double productNumber, double unitsInStock, double unitPrice)
   {
      Name = productName;
      pNumber = productNumber;
      Units = unitsInStock;
      Price = unitPrice;

   }

    public String toString()
    {
       StringBuffer allInfo = new StringBuffer();


   allInfo.append(String.format("Name: %s\n pNumber: %.0f \n Units: %.0f \n Price: %.2f\n",
   getName(),getpNumber(),getUnits(),getPrice()));

   return allInfo.toString();
   }


   //setter methods
   public void setName(String n)
   {
      Name = n;
   }

   public void setpNumber(double no)
   {
      pNumber = no;
   }

   public void setUnits(double u)
   {
      Units = u;
   }

   public void setPrice(double p)
   {
      Price = p;
   }

   //getter methods
   public String getName()
   {
      return Name;
   }

   public double getpNumber()
    {
     return pNumber;
  }

   public double getUnits()
   {
      return Units;
   }

   public double getPrice()
   {
      return Price;
   }

   public double calculateTotalPrice()
   {
       return (Units * Price);
   }

   public static double getCombinedCost(Items[] item) //This is used to set up the method
   {
      double combined = 0; //Loops through array after array is complete

      for (int i = 0; i < item.length; ++i)
      {
         combined = combined + item[i].calculateTotalPrice(); //Sets up to combine all TotalPrice
         //calculations in array
      } //end loop

      return combined;
   } //end method

} //end class

项目详情

package inventory4;

public class ItemDetails extends Items
{
    private String UniqueType;

    public ItemDetails()
    {
        super();
    }

    public ItemDetails(String productName, double productNumber, double unitsInStock, double unitPrice)
    {
    super(productName,productNumber,unitsInStock,unitPrice);
    }

public String enterUniqueType()
    {
        return UniqueType;
    }

public String setUniqueType()
   {
      return UniqueType;
   }

public String getUniqueType()
   {
      return UniqueType;
   }

public double calculateRestock() //setting up to calculate the restocking fee at 5%
    {
       return (Price * .05);
    }
}

3 个答案:

答案 0 :(得分:1)

// getter???
public String setUniqueType() {
    return UniqueType;
}

应该是:

//setter
public void setUniqueType(String type) {
    UniqueType = type;
}

inv[count] = new ItemDetails(Name, Price, Units, pNumber);

应该是:

inv[count] = new ItemDetails(Name, pNumber, Units,Price );//look at the order 
inv[count].setUniqueType(Type);//you have not set it.

答案 1 :(得分:1)

  1. 首先,当我编译时,我的产品编号和价格变得混乱。为什么?

    您正在通过调用

    创建新的ItemDetails对象
    new ItemDetails(Name, Price, Units, pNumber);
    

    ItemDetails的构造函数是

    ItemDetails(String productName, double productNumber, double unitsInStock, double unitPrice)
    

    ,即产品编号优先,价格最后,而不是相反

  2. 其次,为什么产品类型始终返回null?

    你从来没有真正设置你的类型,你的set和get方法都做同样的事情!设置者返回一个值应该是一个警告!

    public String setUniqueType()
    {
          return UniqueType;
    }
    
    public String getUniqueType()
    {
          return UniqueType;
    }
    

    这应该是

    public void setUniqueType(String type)
    {
          this.UniqueType = type;
    }
    

答案 2 :(得分:1)

  

我还希望结合所有消息框...

例如,请参阅JOptionPaneTest