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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zealler 初级黑马   /  2017-7-1 17:29  /  3586 人查看  /  27 人回复  /   2 人收藏 转载请遵从CC协议 禁止商业使用本文

求助!

评分

参与人数 1黑马币 +1 收起 理由
yushulinfeng + 1 输入时出现问题

查看全部评分

来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端

27 个回复

倒序浏览
你new的student数组里面没有存student对象,遍历得到的是null,用null调用方法会空指针
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
785026612 发表于 2017-7-1 17:59
你new的student数组里面没有存student对象,遍历得到的是null,用null调用方法会空指针
...

那不用new赋值怎么给sarr赋值??
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
785026612 发表于 2017-7-1 17:59
你new的student数组里面没有存student对象,遍历得到的是null,用null调用方法会空指针
...

有没有更改建议,老哥
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
785026612 发表于 2017-7-1 17:59
你new的student数组里面没有存student对象,遍历得到的是null,用null调用方法会空指针
...

老哥我30行是想用有参构造传入值
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
785026612 发表于 2017-7-1 17:59
你new的student数组里面没有存student对象,遍历得到的是null,用null调用方法会空指针
...

30行用有参构造会不会有问题

来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
sarr[i]可是值啊,不是你new的对象的地址值
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
QQ1002730074 发表于 2017-7-1 20:07
sarr可是值啊,不是你new的对象的地址值

我认为student类数组中的一个元素应该是一个student类型的对象,这种想法是错误的吗?
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
zealler 发表于 2017-7-1 20:51
我认为student类数组中的一个元素应该是一个student类型的对象,这种想法是错误的吗?
...

我还在纳闷呢,你new的是Student数组?类作为引用数据类型?这点,我还没看到,我刚看完第9天的。你是在上课?
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
zealler 发表于 2017-7-1 20:51
我认为student类数组中的一个元素应该是一个student类型的对象,这种想法是错误的吗?
...

看我这个可以,代码给你:
public static void main(String[] args) {
        Scanner sc = new Scanner( System.in);
       
        Student[] sarr = new Student[3];
        Student s = new Student();
       
        for (int i = 0; i < sarr.length; i++) {
               
                s.setName(sc.nextLine());
                String a = s.getName();
                sarr = new Student(a);
               
                s.setAge(sc.nextInt());
                int b = s.getAge();
                sarr = new Student(b);
        }
       
        for (int i = 0; i < sarr.length; i++) {
                 
                System.out.println("姓名: "+ sarr.getName() + "年龄:" + sarr.getAge());
               
        }
        }
}
class Student{
        private String name;
        private int age;
       
        public Student(){}                                                //空参构造
       
        public Student(String name) {                        //有参构造
                this.name = name;
        }
        public Student(int age){
                this.age = age;
        }
       
       
        public String getName() {
                return name;
        }
       
        public void setName(String name) {
                this.name = name;
               
        }
       
        public int getAge() {
                return age;
        }
        public void setAge(int age) {
                this.age = age;
        }       
}
回复 使用道具 举报
个人理解:引用对象数组和基本数据类型数组不同,不能直接引用。必须单独为每个数组元素进行初始化。要不就报空指针。因为你new student[3] 只有数组的地址。数组中的元素就是你说的Student对象(想法正确)没有内存,全是NULL。  理解了就知道怎么解决空指针了?
回复 使用道具 举报
QQ1002730074 发表于 2017-7-1 21:35
看我这个可以,代码给你:
public static void main(String[] args) {
        Scanner sc = new Scanner( Syste ...

额。也不行
回复 使用道具 举报
aaa12344cs 发表于 2017-7-1 21:39
个人理解:引用对象数组和基本数据类型数组不同,不能直接引用。必须单独为每个数组元素进行初始化。要不就 ...

老哥我有个新想法

来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
回复 使用道具 举报
对象数组必须单独给每一个要创建的对象赋予内存,针对这个问题,也就是要使sarr[i]不为空指针,就必须在创建对象数组之后先逐一给对象数组new一个Student对象,也就是在堆内存中创建三个Student对象并把三个对象的地址值逐一给sarr[i];
楼主的这个方法是创建一个对象,动态初始化后的对象地址直接给了sarr[i];分析的对么?
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
QQ1002730074 发表于 2017-7-1 22:40
对象数组必须单独给每一个要创建的对象赋予内存,针对这个问题,也就是要使sarr[i]不为空指针,就必须在 ...

过两天再回来看看,现在不太懂
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
QQ1002730074 发表于 2017-7-1 22:40
对象数组必须单独给每一个要创建的对象赋予内存,针对这个问题,也就是要使sarr[i]不为空指针,就必须在 ...

你的意思是说,每次循环都要new一个student?
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
QQ1002730074 发表于 2017-7-1 22:40
对象数组必须单独给每一个要创建的对象赋予内存,针对这个问题,也就是要使sarr[i]不为空指针,就必须在 ...

可以!

来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
zealler 发表于 2017-7-1 22:50
可以!

这个只是看那哥们说得要单独去分配内存,我才展开思路的,这个我确实没看到呢,才看到继承,
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
好好搬砖,学什么java
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马