java中数组的学习完整版一.docx
《java中数组的学习完整版一.docx》由会员分享,可在线阅读,更多相关《java中数组的学习完整版一.docx(26页珍藏版)》请在冰点文库上搜索。
java中数组的学习完整版一
1.知识点
一维数组:
定义、初始化、使用(相关的算法,常用系统类的使用)
多维数组:
定义、初始化、使用
增强for循环,break、continue控制语句的学习
2.讲解
什么是数组?
例子
//要求把一个班的一门课的成绩,加起来求平均值;
importjava.util.*;
classAverage{
publicstaticvoidmain(String[]args){
Scannersc=newScanner(System.in);
floatavg=0;
floatsum=0;
intcount=1;
while(count<=3){
sum=sum+sc.nextFloat();
count++;
}
avg=sum/(count-1);
System.out.println("平均值是:
"+avg);
System.out.println("程序结束");
}
}
//新要求:
我要在输出平均值的同时,也要将这门课的最高分,最低分,同时也要能看到这门的成绩
数组概念:
一组能够存储相同数据类型值的变量的集合。
在java中我们本着一切是对象的原则,我们把数组在java中看成是对象,数组对象。
数组是最基本的引用型数据类型。
一维数组的知识点
定义方法:
1、三步法
A、int[]arr;用来申明数组的引用,在栈中为arr开辟内存;
B、arr=newint[5];这是为数组arr在堆中为数组元素开辟6个存储单元;
C、把数组在堆中的起始位置给了arr这个引用变量
*一般我们的程序在运行时,我们为局部变量在栈中开辟内存,而为对象(对象属性)在堆中开辟内存。
为对象方法在方法区开辟内存空间。
为类的属性,在静态区开辟内存空间。
具体的内存图:
2、一步法:
A、int[]arr=newint[6];//这样做完后,arr中有6个元素,它们的默认值是0;
B、int[]arr=newint[]{1,2,3,4};//这样这个数组arr中的元素个数是四个,并且初始值为1,2,3,4;
C、int[]arr={1,2,3,4};//这种做法是静态的声明方法,是为了给c转过来的程序员,方便使用。
importjava.util.*;
classAverage1{
publicstaticvoidmain(String[]args){
Scannersc=newScanner(System.in);
floatavg=0;
floatsum=0;
intcount=0;
intn=0;
System.out.println("班级人数:
");
try{
n=sc.nextInt();
}catch(InputMismatchExceptione0){
}
float[]cj=newfloat[n];//完成数组的声明
System.out.println("开始输入班级成绩:
");
while(counttry{//完成数组的元素的引用和初始化
cj[count]=sc.nextFloat();
sum+=cj[count];
count++;
}catch(InputMismatchExceptione1){
}
}
avg=sum/n;//avg=sum/count;
for(inti=0;i//length在这里是数组对象的一个静态属性,它始终存储的是数组的长度。
System.out.print(cj[i]+":
");
}
System.out.print("\b");
System.out.println("平均值:
"+avg);
System.out.println("程序结束");
}
}
通过上面的例子我们完成了一维数组的定义,初始化,并且也完成了数组的输出。
数组最大值、最小值
importjava.util.*;
classScoreHandler{
publicstaticvoidmain(String[]args){
Scannersc=newScanner(System.in);
floatavg=0;
floatmax=0;
floatmin=0;
floatsum=0;
intcount=0;
intn=0;
StringBuilderresult=newStringBuilder();//这非同步的字符串缓冲类
System.out.println("班级人数:
");
try{
n=sc.nextInt();
}catch(InputMismatchExceptione0){
}
float[]cj=newfloat[n];//完成数组的声明
System.out.println("开始输入班级成绩:
");
while(counttry{//完成数组的元素的引用和初始化
cj[count]=sc.nextFloat();
sum+=cj[count];
count++;
}catch(InputMismatchExceptione1){
}
}
avg=sum/n;//avg=sum/count;
//求最高分
max=cj[0];
for(inti=1;iif(maxmax=cj[i];
}
}
//求最低分
min=cj[0];
for(inti=1;iif(min>cj[i]){
min=cj[i];
}
}
//完成数组的输出
for(inti=0;i//System.out.print(cj[i]+":
");
result.append(cj[i]+":
");
}
result.deleteCharAt(result.length()-1);
//result.delete(result.length()-1,result.length());
//System.out.print(result.substring(0,result.length()-1));
//result.setCharAt(result.length()-1,'');
System.out.print(result);
System.out.println();
System.out.println("平均值:
"+avg+":
最高分:
"+max+":
最低分:
"+min);
System.out.println("程序结束");
}
}
以上是通过分步来求最大、最小;下面我们把求最大最小的过程进行封装成一个方法来简化求解过程,方便以后多次求解同类问题。
importjava.util.*;
classScoreHandler1{
publicstaticvoidmain(String[]args){
Scannersc=newScanner(System.in);
floatavg=0;
floatmax=0;
floatmin=0;
//floatsum=0;
intcount=0;
intn=0;
StringBuilderresult=newStringBuilder();//这非同步的字符串缓冲类
System.out.println("班级人数:
");
try{
n=sc.nextInt();
}catch(InputMismatchExceptione0){
}
float[]cj=newfloat[n];//完成数组的声明
System.out.println("开始输入班级成绩:
");
while(counttry{//完成数组的元素的引用和初始化
cj[count]=sc.nextFloat();
//sum+=cj[count];
count++;
}catch(InputMismatchExceptione1){
}
}
//同过调用求平均值的放法来求一门课的平均值
avg=average(cj);
//求最高分
max=maxScore(cj);
//求最低分
min=minScore(cj);
//完成数组的原样输出
for(inti=0;i//System.out.print(cj[i]+":
");
result.append(cj[i]+":
");
}
//修剪输出的数组字符串中的":
"号
result.deleteCharAt(result.length()-1);
//result.delete(result.length()-1,result.length());
//System.out.print(result.substring(0,result.length()-1));
//result.setCharAt(result.length()-1,'');
System.out.print(result);
System.out.println();
System.out.println("平均值:
"+avg+":
最高分:
"+max+":
最低分:
"+min);
System.out.println("程序结束");
}
//功能方法的分解,封装。
//求平均值的方法
publicstaticfloataverage(float[]arr){
floatavg=0;
floatsum=0;
for(inti=0;isum+=arr[i];
}
avg=sum/arr.length;
returnavg;
}
//求最高分方法
publicstaticfloatmaxScore(float[]arr){
floatmax=arr[0];
for(inti=1;iif(maxmax=arr[i];
}
}
returnmax;
}
//求最低分方法
publicstaticfloatminScore(float[]arr){
floatmin=arr[0];
for(inti=1;iif(min>arr[i]){
min=arr[i];
}
}
returnmin;
}
}
方法的定义(声明):
方法就是一段功能明确的程序,被命名的,可以再程序中反复调用的程序段。
[访问修饰符][普通修饰符][返回值类型]方法名([形式参数])[throws]{
方法体;
[return;]
}
Eg:
publicstaticfloatminScore(float[]arr){
floatmin=arr[0];
for(inti=1;iif(min>arr[i]){
min=arr[i];
}
}
returnmin;
}
方法的重载:
两个方法的名字一样,但参数的个数或类型或顺序不一样,这时我们说方法法生了重载。
其中我们把方法中的方法名,以及参数的个数,类型,顺序,叫做方法的型构。
换句话说我们可以说如果两个方法的型构不一样,我们说着两个方法发生了重载。
publicstaticvoidscoreInput(float[]arr,Scannersc){
inti=0;
while(i//完成数组的元素的引用和初始化
try{
arr[i]=sc.nextFloat();
//sum+=cj[count];
i++;
}catch(InputMismatchExceptione){
System.out.println(e.getMessage());
}
}
}
//输入方法二(这里发生了方法的重载)
publicstaticvoidscoreInput(float[]arr){
Scannersc=newScanner(System.in);
inti=0;
while(i//完成数组的元素的引用和初始化
try{
arr[i]=sc.nextFloat();
//sum+=cj[count];
i++;
}catch(InputMismatchExceptione){
System.out.println(e.getMessage());
}
}
}
二维数组:
是由若干一维数组组成。
它包含行和列;一行就是一个一维数组。
所以我们在声明二维数组时可以一次到位的声明二维数组,也可以多次声明多个一维数组来完成二维数组的声明。
二维数组的声明和使用
int[][]arr=newint[2][2];
也可以
int[][]arr;
arr=newint[2][3];
classArray2{
publicstaticvoidmain(String[]args)
{
intarr[][]=newint[2][2];
System.out.println("二维数组的输入");
//输入
for(inti=0;ifor(intj=0;jarr[i][j]=j;
}
}
//输出
System.out.println("二维数组的输出");
for(inti=0;ifor(intj=0;jSystem.out.print(arr[i][j]+"");
}
System.out.println();
}
System.out.println("结束!
");
}
}
也可以
int[][]arr=newint[][]{{2,2},{2,2}};
classArray3{
publicstaticvoidmain(String[]args)
{
int[][]arr=newint[][]{{2,2},{2,2}};
//输出
System.out.println("二维数组的输出");
for(inti=0;ifor(intj=0;jSystem.out.print(arr[i][j]+"");
}
System.out.println();
}
System.out.println("结束!
");
}
}
也可以
int[][]arr={{2,2},{2,2}};
classArray4{
publicstaticvoidmain(String[]args)
{
int[][]arr={{2,2},{2,2}};
//输出
System.out.println("二维数组的输出");
for(inti=0;ifor(intj=0;jSystem.out.print(arr[i][j]+"");
}
System.out.println();
}
System.out.println("结束!
");
}
}
也可以
int[][]arr=newint[2][];
arr[0]=newint[2];
arr[1]=newint[3];
classArray5{
publicstaticvoidmain(String[]args){
int[][]arr=newint[2][];
arr[0]=newint[2];
arr[1]=newint[3];
System.out.println("二维数组的输入");
//输入
for(inti=0;ifor(intj=0;jarr[i][j]=j;
}
}
//输出
System.out.println("二维数组的输出");
for(inti=0;ifor(intj=0;jSystem.out.print(arr[i][j]+"");
}
System.out.println();
}
System.out.println("结束!
");
}
}
二维综合
//计算一个班英语,数学,计算机科目的最高、最低分以及平均分。
importjava.util.*;
classScoreHandler4{
staticfinalString[]KM={"英语","数学","计算机","体育","政治","网络"};
publicstaticvoidmain(String[]args){
Scannersc=newScanner(System.in);
intpersonNum=0;//班级人数
intclassNum=0;
//成绩记录相关变量声明
float[][]cj=null;
float[][]tongJi=null;//约定依次统计各门科目平均值,最高分,最低分;科目顺序是英语,数学,计算机
//输出结果的处理变量声明
StringBuilderresult[];
//完成科目数量的输入
System.out.println("班级课程数目:
");
try{
classNum=sc.nextInt();
}catch(InputMismatchExceptione0){
}
System.out.println("班级人数:
");
//完成班级人数的输入
try{
personNum=sc.nextInt();
}catch(InputMismatchExceptione0){
}
//完成成绩记录数组的初始化
cj=newfloat[classNum][personNum];
//完成结果统计数组的初始化
tongJi=newfloat[3][classNum];
//输出结果的处理变量初始化
result=newStringBuilder[classNum];
for(inti=0;iresult[i]=newStringBuilder();
}
//班级各门课目成绩的输入
System.out.println("成绩输入开始:
");
scoreInput(cj);
//通过调用求平均值的放法来求每门课的平均值
//求最高分
//求最低分
for(introw=0;rowfor(intcol=0;colswitch(row){
case0:
tongJi[row][col]=average(cj[col]);break;//计算各门课目平均值,依次为英语,数学,计算机
case1:
tongJi[row][col]=maxScore(cj[col]);break;//计算各门课目最高分,依次为英语,数学,计算机
case2:
tongJi[row][col]=minScore(cj[col]);break;//计算各门课目最低分,依次为英语,数学,计算机
}
}
}
//修剪输出的数组字符串中的":
"号并完成数组的原样输出
for(introw=0;rowresult[row]=scoreOutput(cj[row]);//处理好英语数学计算机的原样成绩的输出格式
}
//结果的输出
for(introw=0;row/*switch(row){
case0:
System.out.println("英语原始成绩:
"+result[row]);
for(intcol=0;colswitch(col){
case0:
System.out.print("英语平均值:
"+tongJi[col][row]+"");break;
case1:
System.out.print("英语最高分:
"+tongJi[col][row]+"");break;
case2:
System.out.print("英语最低分:
"+tongJi[col][r