需求:保存全班的每个组的成绩,并对成绩做统计
1. 从键盘输入一共有几组
2. 从键盘输入每一组分别有多少人
3. 从键盘输入每一个同学的成绩
4. 统计每一组的最高分、最低分
5. 统计每一组的平均分
6. 统计全班的最高分、最低分
7. 统计全班的平均分
8. 统计全班的总人数
示例:
public class Home4 {
public static void main(String[] args) {
java.util.Scanner input=new java.util.Scanner(System.in);
int num=input.nextInt();
double[][] scores=new double[num][];//一共是num个组
for (int i = 0; i < scores.length; i++) {
System.out.println("请输入第"+(i+1)+"组的人数:");
int groupNum=input.nextInt();
double[] score=new double[groupNum];
scores[i]=score;
//顺便输入当前组每位学员的成绩
for (int j = 0; j < score.length; j++) {
System.out.println("请输入第"+(i+1)+"组第"+(j+1)+"位同学的java成绩:");
double javaScore=input.nextDouble();
scores[i][j]=javaScore;
}
}
//班级的统计信息
double classMax=0;
double classMin=100;
double classSum=0;
int count=0;
for (int i = 0; i < scores.length; i++) {
//每组的最高分,最低分,平均分
//内层循环是每组人的成绩
double max=scores[i][0];//将每组的第一位同学的成绩设置为最高
double min=scores[i][0];//将每组的第一位同学的成绩设置为最低
double sum=scores[i][0];
for (int j = 1; j < scores[i].length; j++) {//跳过第一个学生的数据
if(scores[i][j]>max)
max=scores[i][j];
if(scores[i][j]<min)
min=scores[i][j];
sum+=scores[i][j];
}
System.out.println("第"+(i+1)+"组的最高分为:"+max);
System.out.println("第"+(i+1)+"组的最低分为:"+min);
System.out.println("第"+(i+1)+"组的总分为:"+sum);
System.out.println("第"+(i+1)+"组的平均分为:"+sum/scores[i].length);
//看此组的最高分是否大于班级的最高分
if(max>classMax)
classMax=max;
if(min<classMin)
classMin=min;
classSum+=sum;
count+=scores[i].length;//每组人数的累加
}
System.out.println("班级最高分:"+classMax);
System.out.println("班级最低分:"+classMin);
System.out.println("班级总分:"+classSum);
System.out.println("班级总人数:"+count);
for (int i = 0; i < scores.length; i++) {
for (int j = 0; j < scores[i].length; j++) {
System.out.println("第"+(i+1)+"组第"+(j+1)+"位同学的成绩为:"+scores[i][j]);
}
}
}
}
D:\javademo\day08_am>java Home4
2
请输入第1组的人数:
3
请输入第1组第1位同学的java成绩:
60
请输入第1组第2位同学的java成绩:
70
请输入第1组第3位同学的java成绩:
90
请输入第2组的人数:
2
请输入第2组第1位同学的java成绩:
88
请输入第2组第2位同学的java成绩:
78
第1组的最高分为:90.0
第1组的最低分为:60.0
第1组的总分为:220.0
第1组的平均分为:73.33333333333333
第2组的最高分为:88.0
第2组的最低分为:78.0
第2组的总分为:166.0
第2组的平均分为:83.0
班级最高分:90.0
班级最低分:60.0
班级总分:386.0
班级总人数:5
第1组第1位同学的成绩为:60.0
第1组第2位同学的成绩为:70.0
第1组第3位同学的成绩为:90.0
第2组第1位同学的成绩为:88.0
第2组第2位同学的成绩为:78.0
1. 类的第二大成员-->成员方法
类:一组具有相同特征(属性),相同行为(方法)的对象的集合,抽象出来的概念
属性:通过变量去存储数据
方法:一段可以运行的代码(实现某些需求)
2. 最简单的方法
public void 方法名(){
//n行代码-->在main方法内可以写的代码,在此处都可以写
}
3. 方法的原则
① 先声明后使用
② 调用一次执行一次,不调用不执行
调用一次,在栈中压入一个方法栈。(回头解释)
4. 成员方法的分类
① 实例方法 属于对象的,必须有对象才可以
② 类方法 (等到讲static在讲类方法) 属于类
5. 方法的语法
【修饰符】 返回值类型 方法名(【形参列表】){方法体}
① 修饰符 可有可无,后期讲
② 返回值类型 ★
③ 方法名 自定义名字(符合变量名的命名规则和规范)
④ 形参列表 ★
⑤ 方法体 main方法中可以写的,该位置都可以写
6. 方法的形式
a. 无参无返回值
【public】 void print(){代码体}
无参:方法名的小括号内无任何内容
无返回值:返回值位置写void
b. 有参无返回值
【public】 void print(参数列表){代码体}
有参:在方法名的小括号内,指定参数列表
参数列表:可以是任意类型(基本数据类型、引用数据类型)
调用方法的时候,必须按照方法指定的参数列表传值(类型、个数、顺序)
无返回值:返回值位置写void
c. 无参有返回值
【public】 返回值类型 方法名(){代码体}
无参:方法名的小括号内无任何内容
有返回值:
返回值类型要指定
返回值类型只能指定一个(思考:如果想要返回多个数据)
如果是多个相同类型的数据,可以使用数组
如果类型是不一样的多个数据,可以使用集合(后面也是一个重要知识点)
返回值类型可以是任意类型(基本、引用)
有返回值的方法,必须要执行到return 数据;这个代码
调用方如何接收返回值:
数据类型 变量名=对象.方法();//接收数据的数据类型要和返回值类型相一致
return 关键字
功能:结束当前方法(遇到return,方法就会立刻结束)
如果无返回值,返回值类型位置写void,方法内默认是存在一个return语句
如果有返回值,方法中必须检测到有return是执行的!执行到就立刻结束方法
d. 有参有返回值
参数:和之前一样
返回值:和之前一样
开饭店:
调研->找调研公司
你需要告诉调研公司的需求我主要针对的客户是20-35...) 参数
调研公司最后会给你一个结果(数据) 返回值
找店面->找中介
装修->找装修公司(需要告知其风格,就开始干)
开业->找营销公司(有一个流程,直接干就完事)
营业
...
练习:(使用无参无返回值的方法实现)
1. 需求:打印一个5行的直角三角形
2. 需求:打印一个8行的直角三角形
3. 需求:打印一个10行的直角三角形
练习:(使用有参无返回值的方法实现)
1. 需求:帮我们遍历int型数组
2. 需求:帮助我们对int数组,进行小-大排序
练习:(使用无参有返回值的方法实现)
1. 需求:随机产生1个四位数字返回
2. 需求:随机产生3个四位数字返回
3. 需求:随机产生5个四位数字返回
练习:
1. 需求:帮助我们在指定的char数组中找指定的字符,
返回角标,如果找不到返回-1
7. 遇到需求的时候,要自己分析,方法的参数列表是什么,返回值类型是什么
8. 方法声明的位置是类体中(方法中不能嵌套方法)
9. 实例方法的调用
9.1 在本类内
直接调用 语法:【this.】本类的方法();
this是当前对象,是当前方法的调用者!
9.2 在其他类内
必须通过对象去调用!
10. 方法调用内存相关 ★
方法是调用一次执行一次,不调用不执行!
今日总结:
1. 成员方法
声明-->使用
形参和实参
形参:方法声明时指定的参数列表
实参:方法调用时,传递的真正的数据
【12】12:20 类中成员方法
public int randomNum(){
System.out.println("随机产生数字");
int num=(int)(Math.random()*9000+1000);
//return 数据;//数据必须和返回值类型相一致
if(true){//编译器,是在运行之前,如果if不成立,则执行不到return
return num;
}
return num; //上面这样加个 if(true)条件,那么这行不写,则编译时就报错
}
【12】29:00 类中成员方法
public void function(){
System.out.println("aaaaaaaaa");
System.out.println("bbbbb");
System.out.println("ccccccc");
return;
System.out.println("ssss");//为什么报错!因为100%运行不到
//return;//默认存在的,写不写都有,在方法的最末尾
return;
}
【17】15:00 方法入栈内存图
public class Demo6 {
public static void main(string[] args) {
MyTools myTools=new MyTools();
double max = myTools.max3(23.5, 60, 7);
double max1 = myTools.max(1.5, 30);
}
}
//属于MyTools类
public double max(double a,double b){
return a>b?a:b;
}
public double max3(double a, double b, double c){
double max = max(a,b);
return max>c?max:c;
}
方法入栈:先进后出的原则
方法调用一次执行一次,调用一次,就入栈一次
入栈:在栈内存中分配一块空间,供当前这个方法运行使用