-- 作者:admin
-- 发布时间:2006/2/26 21:46:03
-- 同学作业中存在的十个主要问题!
下面把同学普遍存在的主要错误说明一下: 1、类和方法的名称起的要规范,不能随随便便的把诸如C、CC等难以看懂的符号作为它们的名称,同时也要注意单词的正确,如有人就用cubic(立方体)作为圆柱形的类名!还有的同学把对h属性操作的set方法和get方法写为诸如hset和hget的模样(应该是setH和getH)!
2、类中的set方法主要用于对类中的属性进行赋值,但是通常并不关心如何设置,即不用考虑用户是通过字符界面输入还是通过窗体界面输入,所以可以使用函数参数来将所需赋的值传递过来,无需指定输入的方式。如: public void seth() { String str=javax.swing.JOptionPane.showInputDialog("Input the height of cylinder:"); height=Double.parseDouble(str); }
应该写为: public void seth(double h) { height=h; }
3、类中的set方法一般无需返回数据,返回数据的方法应该是get方法,有的同学将setCylinder方法设定为返回体积,其实这是getCylinder的功能。同时,有的同学甚至把getCylinder方法设定为返回圆柱形高度,这也是让人不可理解的!
4、类的封装要严谨,具有一定功能的代码应该封装到一个类中。如圆柱形体积的计算应该封装到圆柱形类中,而不应该交于应用程序去完成,更不应该将圆柱形类和应用程序类混在一齐!
5、很多同学写成这个模样: public void setVol() { v=3.14*(double)(r*r*h); }
public double getVol() { return v; }
可以看出此时的setV方法意义并不大,不如将setVol方法和getVol可以合并成一个getVol,即: public double getVol() { v=3.14*(double)(r*r*h); return v; }
6、很多学生写成这个模样: public void setVol(int r,int h) { v=pi*(double)(r*r*h); } public double getVol() { return v; } 此时,圆柱形类存在逻辑错误的隐患,由于v变量可能由于外界调用setVol方法设置为新的体积值,从而和现有的其他诸如h等属性成员产生逻辑不相匹配的情况。此乃大忌!
7、不该继承的时候就无需继承,如应用程序就没有必要继承其他几何类,其实也不应该继承。有的同学写成这个模样: public class cc extends c { public static void main(String args[]) { c c1=new c(); c1.x=4; c1.y=5; c1.r=6; c1.height=7; c1.taoString(); } }
8、有同学问: 圆柱形类中得到体积的方法: public void js() { double volume=3.14*r*r*high; System.out.println(volume); } 应用程序调用此方法: System.out.println(c.js());
既然圆柱形类有得到体积的方法,为什么在主函数中调用不起来?
回答:请注意js()函数定义为:public void js(),也就是返回类型为空,当然不能在main中打印了,应该将Cylinder类的js方法修改为: public double js() { double volume=3.14*r*r*high; return volume; } 此时便可以调用了。如果不去修改圆柱形类,那么应该在主函数中调用方法为:c.js();
这也说明作为圆柱形类本身是不应该考虑输出界面的,相反它只需考虑输出什么即可,而在应用程序中去实现输出的界面。
9、有同学问:在Point类中定义了构造函数,为: public Point(int x,int y) { this.x=x; this.y=y; } 为什么在圆柱形类中不定义构造函数会出错?
回答:子类在调用构造函数的时候,会先调用父类的构造函数,但是父类Point中只有含有参数的构造函数,而子类又没有把参数在调用父类构造函数的时候传给它,所以产生错误。解决方法有两个: 1)可以修改Point类,添加默认构造函数 public Point() {}
2)可以在子类调用父类构造函数的时候传给它参数 public Circle() { super(0,0); }
10、有的同学在圆柱形类中定义计算体积的方法如下: public void js() { double volume=3.14*r*r*high; } 注意:此方法中并没有返回体积值,也没有设置类的属性,只是设置一个方法中的局部变量volume,此volume变量会在方法结束被调用的时候销毁,所以,此方法没有任何结果留下来,没有任何意义!
应该修改为: public double js() { double volume=3.14*r*r*high; return volume; }
关于局部变量,大家要注意,只能在定义此变量的方法中使用,而不能在其他方法中使用,如下面的定义是错误的: public void js() { double volume=3.14*r*r*high; } public String toString() { return super.toString()+" "+"高:"+high+" "+"体积:"+volume; }
解决方法为: 1)由于toString()方法不能访问js()中的局部变量,应该直接调用js()来得到体积,修改为toString: public String toString() { return super.toString()+" "+"高:"+high+" "+"体积:"+js(); }
2)设置类的属性成员:double volume; 两个方法重新定义为: public void js() { volume=3.14*r*r*high; } public String toString() { return super.toString()+" "+"高:"+high+" "+"体积:"+volume; }
此时更加合理的做法是将名称定义规范: public void setVolumn() { volume=3.14*r*r*high; }
public String toString() { return super.toString()+" "+"高:"+high+" "+"体积:"+volume; }
setVolumn方法意义并不大,完全可以取消,所以更加简单的做法为: public String toString() { return super.toString()+" "+"高:"+high+" "+"体积:"+3.14*r*r*high; }
[此贴子已经被作者于2010-12-12 07:44:03编辑过]
|