困死了。今天还是在补充买种子这个行为的功能。开始还特地写了个seedStorage来继承Storage,后来发现直接用Storage就很完美了。今天的主要进展是完善了继承Products的Seed类。主要是完善构造方法,这使得主程序在利用Seed类的时候可以方便的根据情况选择合适的构造方法。(因为读取控制台命令和从后台内部程序创建对象略有不同)将Farmer类的买种子方法和种子店的sellSeeds方法联动了,并在主程序Farmergame中创建种子仓库对象seedStorage,把购买到的种子储存起来,并且联动了Farmer的cash属性。
总来的来说犯错修正还是花了更多的时间,功能倒是没实现多少。其中学到的是:将Storage类中静态初始化的Produts数组改成了默认赋值。结果运行时得到了空指针异常。因为数组中的空对象还可以用来做显示和做判断,但它的属性是不存在的。另外还学到一点,主程序中用来生成存入数组的对象,把它的作用域设计成赋值给数组元素的那一段代码就可以了。不然会造成你更改了对象的属性后,数组元素也相应的改了,因为毕竟存的只是个地址啊。这方面一定要有清醒的认识。Java内存使用的知识还需深入了解掌握。下面放今日更新代码:
package plants;
import farmgame.Products;
public class Seed extends Products{
public Seed(String name, int num,float price) {
super(name,num,price);
}
public Seed(String name,int num) {
this.setProductName(name);
this.setProductNum(num);
}
public Seed () {
}
}
package farmgame;
import plants.Plants;
import shop.SeedShop;
import plants.Seed;
public class Farmer {
private float cash = 10.0F;
public void Seed(Plants plts) {
System.out.println("种植 : " + plts.getName());
plts.setStatus(1);
}
public void TakeCare(Plants plts) {
if (plts.getStatus() <= 2)
plts.setStatus(plts.getStatus() + 1);
else
System.out.println(plts.getName() + " 已经成熟啦。 ");
}
public boolean Harvest(Plants plts) {
if (plts.getStatus() >= 3) {
System.out.println("收获了:" + plts.getName());
return true;
}
else {
System.out.println(plts.getName() + " 还没成熟. ");
return false;
}
}
public float Sell(Products pdcts) {
float sum = pdcts.getPrice() * pdcts.getProductNum();
cash = cash