java中对象数组的应用,空指针异常,求教。

packagecom.ch.java.student;//学生类publicclassStudent{//属性:姓名,性别,年龄,专业,爱好publicStringnam... package com.ch.java.student;
// 学生类
public class Student {

// 属性:姓名,性别,年龄,专业,爱好
public String name;
public char sex;
public int age;
public String professionals;
public String hobby;
public double score;

}
*******************************************************
package com.ch.java.student;
// 计算分数类
public class ScoreAreCalculated {
// 定义数组
Student[] scores = new Student[5];
// 方法:求平均分
public double avgScore() {
double sum = 0.0;
double avg = 0.0;
for (int i = 0; i < scores.length; i++) {
sum += scores[i].score;
}

avg = sum / scores.length;
return avg;
}
// 方法:求最高分
public double maxScore() {
double max = scores[0].score;
for (int i = 0; i < scores.length; i++) {
if (max < scores[i].score) {
max = scores[i].score;
}
}

return max;
}

}
**********************************************
package com.ch.java.student;

// 导入Scanner类
import java.util.Scanner;

public class ScoreAreCalculatedTest {

public static void main(String[] args) {
// 创建Scanner对象
Scanner input = new Scanner(System.in);
// 创建ScoreAreCalculated对象
ScoreAreCalculated score = new ScoreAreCalculated();
// 创建Studnet对象
Student stu = new Student();
// 输入学生成绩
for (int i = 0; i < score.scores.length; i++) {
System.out.print("请输入第" + (i+1) + "名学生成绩:");
stu.score = input.nextDouble();
score.scores[i].score = stu.score; // 报错位置
}
// 调用avgScore方法
double avg = score.avgScore();
System.out.println("五位同学的平均分为:" + avg);
// 调用maxScore方法
double max = score.maxScore();
System.out.println("五位同学中最高分为:" + max);

// 关闭输入资源
input.close();
}

}
展开
 我来答
xjwxj520
2015-10-27 · 超过51用户采纳过TA的回答
知道小有建树答主
回答量:94
采纳率:0%
帮助的人:79.6万
展开全部

// 定义数组

Student[] scores = new Student[5];

你定义了一个对象的数组,没有初始化的话 默认都是 null 就是 每个student 都是 null

int[] a = new int[4]  4个a默认都是0

可以这样处理

import java.util.Scanner;


// 学生类
class Student {

// 属性:姓名,性别,年龄,专业,爱好
public String name;
public char sex;
public int age;
public String professionals;
public String hobby;
public double score;

}

 class ScoreAreCalculated {
// 定义数组
Student[] scores = null;
ScoreAreCalculated(int count){
scores = new Student[count];
for (int i = 0; i < scores.length; i++) {
scores[i] = new Student();
}
}
// 方法:求平均分
public double avgScore() {
double sum = 0.0;
double avg = 0.0;
for (int i = 0; i < scores.length; i++) {
sum += scores[i].score;
}

avg = sum / scores.length;
return avg;
}
// 方法:求最高分
public double maxScore() {
double max = scores[0].score;
for (int i = 0; i < scores.length; i++) {
if (max < scores[i].score) {
max = scores[i].score;
}
}

return max;
}

}
public class ScoreAreCalculatedTest {

public static void main(String[] args) {
// 创建Scanner对象
Scanner input = new Scanner(System.in);
System.out.print("请输入共有几名学生成绩要输入:");
int count = input.nextInt();
// 创建ScoreAreCalculated对象
ScoreAreCalculated score = new ScoreAreCalculated(count);
// 创建Studnet对象
Student stu = new Student();
// 输入学生成绩
for (int i = 0; i < score.scores.length; i++) {
System.out.print("请输入第" + (i+1) + "名学生成绩:");
stu.score = input.nextDouble();
score.scores[i].score = stu.score; // 报错位置
}
// 调用avgScore方法
double avg = score.avgScore();
System.out.println("五位同学的平均分为:" + avg);
// 调用maxScore方法
double max = score.maxScore();
System.out.println("五位同学中最高分为:" + max);

// 关闭输入资源
input.close();
}

}
追问
如何初始化,求教。刚接触不懂,谢谢。
追答
刚才那个人的的方法也行,我的方法用到了构造函数,并添加了一个小小的功能,可以自定义的输入学生数。你看下我第一次回答的,在追问的同时更新了下。
白菜一颗
2015-10-27 · TA获得超过8916个赞
知道大有可为答主
回答量:3260
采纳率:69%
帮助的人:3737万
展开全部

数组老问题了,你的这句只是定义一这个数组,但是数组里面的5个元素仍然未定义,你需要在使用前循环全部初始化每个元素一遍,或者在使用的时候单独初始化一下

Student[] scores = new Student[5];
追问
如何初始化,求教。刚接触不懂,谢谢。
追答
// 输入学生成绩
for (int i = 0; i < score.scores.length; i++) {
    System.out.print("请输入第" + (i+1) + "名学生成绩:");
    stu.score = input.nextDouble();
    score.scores[i] = new Student();  // 加上这行
    score.scores[i].score = stu.score; // 报错位置
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式