Java【08】方法入栈内存图

需求:保存全班的每个组的成绩,并对成绩做统计

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;
}

方法入栈:先进后出的原则
方法调用一次执行一次,调用一次,就入栈一次
入栈:在栈内存中分配一块空间,供当前这个方法运行使用


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值