A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王怡然 黑马帝   /  2012-5-4 01:17  /  3579 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class Students {
  2.         private String name;
  3.         private int age;
  4.         private double testScore;

  5.         Students() {
  6.         }

  7.         Students(String name, int age, double testScore) {
  8.                 this.name = name;

  9.                 if (age > 0 && age < 120) {
  10.                         this.age = age;
  11.                 } else
  12.                         System.out.println("非法年龄");

  13.                 if (testScore > 0 && testScore < 150) {
  14.                         this.testScore = testScore;
  15.                 } else
  16.                         System.out.println("非法成绩");

  17.         }

  18.         void show() {
  19.                 System.out.println("姓名:" + name);
  20.                 System.out.println("年龄:" + age);
  21.                 System.out.println("考试成绩:" + testScore);
  22.         }

  23.         public String getNaem() {
  24.                 return name;
  25.         }

  26.         public void setNaem(String naem) {
  27.                 this.name = name;
  28.         }

  29.         public int getAge() {
  30.                 return age;
  31.         }

  32.         public void setAge(int age) {
  33.                 if (age > 0 && age < 120) {
  34.                         this.age = age;
  35.                 } else
  36.                         System.out.println("非法年龄");
  37.         }

  38.         public double getTestScore() {
  39.                 return testScore;
  40.         }

  41.         public void setTestScore(double testScore) {
  42.                 if (testScore > 0 && testScore < 150) {
  43.                         this.testScore = testScore;
  44.                 } else
  45.                         System.out.println("非法成绩");
  46.         }

  47. }
复制代码
代码在这,传入非法年龄在构造函数里的时候年龄就成0了;

6 个回复

倒序浏览
哥们你不是做出来了吗?
难道还有疑问
回复 使用道具 举报
本帖最后由 贾联国 于 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: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了,
  • 代码设计的不严谨就导致了这种情况。
回复 使用道具 举报
我想说一个小问题,这貌似也是程序员的致命问题吧...你get set 方法里的参数写错了吧。
public void setName(String name)
{
     this.name=name;
}
你输入非法年龄的时候,没有给年龄赋值,这个时候系统就会自动给它赋初始值了
int 型的赋值0;string型赋值null.....
所以想办法解决这个问题就好了
回复 使用道具 举报
问题多多哦,首先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最好加上大括号对,一定要匹配好,不要嫌麻烦,否则代码量大的话查错会非常非常的麻烦,如果换个人看你代码,绝对头晕。
这是很好的编程习惯。
回复 使用道具 举报
上面的兄弟们说的很详细了,小弟补充一下题外话
从上面看出楼主的知识点关于一下几点不清楚:
成员变量(如果不显示的赋值,创建对象jvm就会赋初始值)在堆内存
局部变量(如果声明时不赋值,编译就过不去) 在栈内存
构造函数(在成员变量赋初始值后的一个补充)
再深入一点就会涉及 构造代码块 静态代码块 等
建议楼主学一下 毕老师的视频 面向对象(成员变量和局部变量)  面向对象(构造函数)  面向对象(构造代码块) 面向对象(静态代码块)  祝您早日成功
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马