黑马程序员技术交流社区
标题:
求解,在构造函数里如何判断年龄值?
[打印本页]
作者:
王怡然
时间:
2012-5-4 01:17
标题:
求解,在构造函数里如何判断年龄值?
public class Students {
private String name;
private int age;
private double testScore;
Students() {
}
Students(String name, int age, double testScore) {
this.name = name;
if (age > 0 && age < 120) {
this.age = age;
} else
System.out.println("非法年龄");
if (testScore > 0 && testScore < 150) {
this.testScore = testScore;
} else
System.out.println("非法成绩");
}
void show() {
System.out.println("姓名:" + name);
System.out.println("年龄:" + age);
System.out.println("考试成绩:" + testScore);
}
public String getNaem() {
return name;
}
public void setNaem(String naem) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age > 0 && age < 120) {
this.age = age;
} else
System.out.println("非法年龄");
}
public double getTestScore() {
return testScore;
}
public void setTestScore(double testScore) {
if (testScore > 0 && testScore < 150) {
this.testScore = testScore;
} else
System.out.println("非法成绩");
}
}
复制代码
代码在这,传入非法年龄在构造函数里的时候年龄就成0了;
作者:
黄或俊
时间:
2012-5-4 01:42
哥们你不是做出来了吗?
难道还有疑问
作者:
贾联国
时间:
2012-5-4 02:04
本帖最后由 贾联国 于 2012-5-4 02:06 编辑
你问的问题我懂了, 其实你可以用年龄非法RuntimeException,下面是代码:
class Students {
private String name;
private int age;
private double testScore;
Students() {
}
Students(String name, int age, double testScore) {
this.name = name;
if (age > 0 && age < 120) {
this.age = age;
} else
throw new RuntimeException("非法年龄"); //
年龄非法RuntimeException
if (testScore > 0 && testScore < 150) {
this.testScore = testScore;
} else
throw new RuntimeException("非法成绩");
//成绩非法RuntimeException
}
void show() {
System.out.println("姓名:" + name);
System.out.println("年龄:" + age);
System.out.println("考试成绩:" + testScore);
}
public String getNaem() {
return name;
}
public void setNaem(String naem) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age > 0 && age < 120) {
this.age = age;
} else
throw new RuntimeException("非法年龄");
//年龄非法RuntimeException
}
public double getTestScore() {
return testScore;
}
public void setTestScore(double testScore) {
if (testScore > 0 && testScore < 150) {
this.testScore = testScore;
} else
throw new RuntimeException("非法成绩");
//成绩非法RuntimeException
}
}
输出错误的值,肯定不会运行下去的
作者:
杨威
时间:
2012-5-4 02:06
本帖最后由 杨威 于 2012-5-4 02:08 编辑
public int getAge() {
return age;
}
public void setAge(int age) {
if (age > 0 && age < 120) {
this.age = age;
} else
System.out.println("非法年龄");
}
如果调用setAge时传入的数值范围不在0到120,那getAge就返回age的初始化值0,所以就输出0了,
代码设计的不严谨就导致了这种情况。
作者:
安路凤
时间:
2012-5-4 08:32
我想说一个小问题,这貌似也是程序员的致命问题吧...你get set 方法里的参数写错了吧。
public void setName(String name)
{
this.name=name;
}
你输入非法年龄的时候,没有给年龄赋值,这个时候系统就会自动给它赋初始值了
int 型的赋值0;string型赋值null.....
所以想办法解决这个问题就好了
作者:
符云爵
时间:
2012-5-4 14:23
问题多多哦,首先get set方法推荐使用鼠标右键添加,很方便。
public String getNaem() {
return name;
}
public void setNaem(String naem) {
this.name = name;
}
这两个方法,明显看出楼主是手写的,难道编译成功了?
另外,上楼的美眉也说出来了,在构造函数中
if (age > 0 && age < 120) {
this.age = age;
} else
System.out.println("非法年龄");
你只判断了输入年龄符合条件时才进行赋值,不符合条件时,也就是else中,没有对age进行赋值,那肯定是默认的0了,下边的测试分数也一样。
此外,建议楼主,编写代码时注意规范,else最好加上大括号对,一定要匹配好,不要嫌麻烦,否则代码量大的话查错会非常非常的麻烦,如果换个人看你代码,绝对头晕。
这是很好的编程习惯。
作者:
黑马张立国
时间:
2012-5-4 15:08
上面的兄弟们说的很详细了,小弟补充一下题外话
从上面看出楼主的知识点关于一下几点不清楚:
成员变量(如果不显示的赋值,创建对象jvm就会赋初始值)在堆内存
局部变量(如果声明时不赋值,编译就过不去) 在栈内存
构造函数(在成员变量赋初始值后的一个补充)
再深入一点就会涉及 构造代码块 静态代码块 等
建议楼主学一下 毕老师的视频 面向对象(成员变量和局部变量) 面向对象(构造函数) 面向对象(构造代码块) 面向对象(静态代码块) 祝您早日成功
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2