IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java基础(三)——方法,方法重载,数组 -> 正文阅读

[Java知识库]Java基础(三)——方法,方法重载,数组



本博客将大概介绍Java中数组、方法的基本概念和使用,仅适合基础教学,并不深入研究

从一个简单的例子入手

假如现在教务处的老师有个需求,需要让你设计一个程序,教师输入若干个学生的成绩,让你计算平均分并输出

较为简单的解决办法

上节课我们已经学习了循环,所以我们可以这样做:
首先让教师输入学生数量,用一个int变量cnt接收
然后再让教师循环输入学生的成绩,用一个float型变量score接收,
然后需要一个float类型的变量sum将每次读入的score加起来,
最后输出float类型的平均值avg=sum/cnt
用Java代码来表述大致就是:

Scanner in=new Scanner(System.in);
System.out.println("请输入学生数量");
int cnt=in.nextInt();
float sum=0;
float score;
float avg;
System.out.println("请输入学生分数");
for (int i=1;i<=cnt;i++){
	score=in.nextFloat();
	sum+=score;
}
avg=sum/cnt;
System.out.printf("平均分为:%.2f",avg);

另外一个问题

现在还有一个需求就是输出平均分之后,再输出分数高于平均分的学生的个数。解决这个问题的难点在于——
当输入完每个学生的成绩之后我们还不能丢弃它,需要把它保存起来,而如果为每个学生的成绩都单独创建一个变量来保存的话就显得特别麻烦代码特别臃肿。所以接下来就要用到一个新的东西——数组

数组

数据可以存放在变量里,每一个变量有一个名字,有一个类型,还有它的生存空间。如果我们需要保存一些相同类型、相似含义、相同生存空间的数据,我们可以用数组来保存这些数据,而不是用很多个独立的变量。数组是长度固定的数据结构,用来存放指定的类型的数据。
所以上述问题就可以用以下方法来解决

Scanner in=new Scanner(System.in);
System.out.println("请输入学生数量");
int cnt=in.nextInt();
int num=0;
float sum=0;
float[] score=new float[cnt];
float avg;
System.out.println("请输入学生分数");
//这里注意length成员,最好不要用cnt
for (int i=0;i<score.length;i++){
    score[i]=in.nextFloat();
    sum+=score[i];
}
avg=sum/cnt;
for (float s:score){
    if (s>=avg) num++;
}
System.out.printf("平均分为:%.2f,共有%d人超过平均分",avg,num);

数组是对象变量

数组变量与基本类型变量是有一些区别的,它属于对象变量,对象变量的意思就是,它是一遍数据区域的管理者而不是所有者,具体可以通过下面这个例子来理解:

对于基本类型的变量而言,变量中存储的就是“值”,
而对于对象变量来讲,变量中存在的并不直接是数据,而是“引用”,
这里的“引用”可以理解为对一片数据区域的遥控器,所以我们常说对象变量是对象的管理者而不是所有者


//基本数据类型的变量
int a=10;
//将a中的“值”传递给b
int b=a;
b++;
System.out.println(a+"  "+b);
//输出:10  11


//对象变量
int[] a={1,2,3,4,5};
//将a的“引用”传递给b
int[] b=a;
b[0]=10;
System.out.println(a[0]);
System.out.println(b[0]);
//输出10  10

解决了上面这个问题之后我们还要面临另外一个问题,假如上述的这代码的使用需求较强,你需要在程序的很多其他地方用到这段代码,那需要用的时候你会怎么办呢,最蠢的办法当然是复制粘贴😅,但是显然这种办法太笨了,会让代码飞速膨胀,所以我们需要用下面这种方式将这代码保存起来,需要的时候再用。

方法(函数)

Java语言中的“方法”(Method)也可被称为“函数”(Function)。对于一些复杂的代码逻辑,如果希望重复使用这些代码,并且做到“随时任意使用”,那么就可以将这些代码放在一个大括号“{}”当中,并且起一个名字。使用代码的时候,直接找到名字调用即可。
Java方法的大体结构如下

<返回类型> <方法名称>(<参数表>) {

	<方法体>

}

<返回类型>是这个函数运行结束时要返回给调用者的数据的类型,函数可以返回基本数据类型、对象或者void。返回void表示这个函数不返回任何值。
<函数名称>是一个Java名字,一样要遵循和变量一样的命名规则。
<参数表>是0个或1个或多个参数定义,用逗号’,’分隔。

所以相应的我们就需要写一个函数,将学生的人数作为传入的参数,取名为getAvg,暂且我们只需要在里面直接输出信息,所以可以把返回类型设置为void

void getAvg(int cnt){
        int num=0;
        float sum=0;
        float[] score=new float[cnt];
        float avg;
        Scanner in=new Scanner(System.in);
        System.out.println("请输入学生分数");
        //这里注意length成员,最好不要用cnt
        for (int i=0;i<score.length;i++){
            score[i]=in.nextFloat();
            sum+=score[i];
        }
        avg=sum/cnt;
        for (float s:score){
            if (s>=avg) num++;
        }
        System.out.printf("平均分为:%.2f,共有%d人超过平均分",avg,num);
}

在这个阶段,我们暂且在所有的函数的返回类型前面加上关键字“static”。static表示这个函数属于这个类,而不属于这个类的任何对象,因此我们才可以不制造这个类的对象,而直接从main()函数中调用它。

方法重载

上述方法看来是蛮不错的,但是我们现在还需要另外一个功能,在我们输入学生信息之前,我们要先输入这是哪一门的成绩,最后再将科目名称和平均分一同输出,并且保留原来的方法,那么我们就需要对原来的方法进行一个重载操作

Java的方法重载,就是在类中可以创建多个方法,它们可以有相同的名字,但必须具有不同的参数,即或者是参数的个数不同,或者是参数的类型不同。调用方法时通过传递给它们的不同个数和类型的参数,以及传入参数的顺序来决定具体使用哪个方法。百度百科

static void getAvg(int cnt,String subject){
    int num=0;
    float sum=0;
    float[] score=new float[cnt];
    float avg;
    Scanner in=new Scanner(System.in);
    System.out.println("请输入学生分数");
    //这里注意length成员,最好不要用cnt
    for (int i=0;i<score.length;i++){
        score[i]=in.nextFloat();
        sum+=score[i];
    }
    avg=sum/cnt;
    for (float s:score){
        if (s>=avg) num++;
    }
    System.out.printf(subject+"的平均分为:%.2f,共有%d人超过平均分",avg,num);
}

重载优先级

重载方法的优先级,遵从一下优先序列,char>int>long>double>float>Character

static void show(int data){
    System.out.println("this is a int:"+data);
}
static void show(long data){
    System.out.println("this is a long:"+data);
}
static void show(float data){
    System.out.println("this is a float:"+data);
}
static void show(double data){
    System.out.println("this is a double:"+data);
}

//调用
show(10);//输出 this is a int:10
show(10.0);//输出 this is a double:10.0
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-07-13 17:19:45  更:2021-07-13 17:22:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 20:42:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码