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();
}
} 展开
// 学生类
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();
}
} 展开
2个回答
展开全部
// 定义数组
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();
}
}
追问
如何初始化,求教。刚接触不懂,谢谢。
追答
刚才那个人的的方法也行,我的方法用到了构造函数,并添加了一个小小的功能,可以自定义的输入学生数。你看下我第一次回答的,在追问的同时更新了下。
展开全部
数组老问题了,你的这句只是定义一这个数组,但是数组里面的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; // 报错位置
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询