Java编程那些事儿45—数组利用示例
当前位置:以往代写 > JAVA 教程 >Java编程那些事儿45—数组利用示例
2019-06-14

Java编程那些事儿45—数组利用示例

Java编程那些事儿45—数组利用示例

副标题#e#

6.3 数组利用示例

本部门通过一系列的示例,熟悉数组的根基语法,并演示一些利用数组可以办理的根基问题。在实际利用数组时,数组的长度以及数组中每个元素存储的数据,都按照逻辑需要举办设计。

6.3.1 轮回初始化数组元素

要求:初始化一个长度为100的int数组,数组中的元素依次为1-100。

这是一个根基的利用,主要是熟悉数组的语法,在实际编写时,需要发明数组下标和数组元素值之间的纪律即可。

第一种思路:轮回数组的下标0-99,则和下标对应的元素的值比数组下标多1。

则实现代码如下:

int[] m = new int[100];
for(int i = 0;i < m.length;i++){
 m[i] = i + 1;
}

代码说明:声明并初始化一个长度是100的数组,利用轮回轮回数组的下标,下标的区间是[0,m.length-1],个中m.length暗示数组的长度。在实际赋值时,把数组的下标做成变量,则当i的值为0时,则m[i]就是m[0],依次类推,凭据题目标要求,则数值的纪律是i+1,这样轮回竣事今后,数组m中的值就依次是1-100了。

第二种思路:轮回数组的值1-100,则下标比数组的值下1。

则实现的代码如下:

int[] m = new int[100];
for(int i = 1;i <= 100;i++){
 m[i – 1] = i;
}

该代码中轮回变量i的值从1轮回到100,则数组的下标是i – 1,这样也可以实现题目要求的成果。

6.3.2输出数列

要求:输出1 1 2 3 5 8 13……这样的数列,输出该数列的前20个数字。

该题是一个根基的数字逻辑,在实际办理该问题时,首先要发明该数字的纪律,然后凭据该纪律来设计数组即可。

实现思路:数字的纪律是除了数列里的前两个数字以外,其它的数字都满意该数字便是前两个数字的和,由于题目要求输出前20个数字,所以需要一个长度为20的数组,第一个和第二个数字直接赋值,后续的数字通过前两个数字元素获得。

则实现的代码如下:

int[] num = new int[20];
num[0] = 1;
num[1] = 1;
//轮回初始化
for(int i = 2;i < num.length;i++){
 num[i] = num[i – 1] + num[i – 2];
}
//轮回输出
for(int i = 0;i < num.length;i++){
  System.out.print(num[i]);
  System.out.print(‘ ‘);
}
System.out.println();//换行

在该代码中,初始化一个长度为20的数组,首先将数组中的前两个元素赋值成1,然后轮回对后续的元素的赋值,假如当前元素的下标是i,则它前一个元素的下标是i-1,再前面一个元素的下标是i-2,只需要将这2个元素的值相加,然后赋值给当前元素即可。后头利用一个轮回,输出数组中所有的元素,元素和元素之间有一个隔断的空格,在输出所有的元素今后换行。


#p#副标题#e#

6.3.3 歌手打分

要求:在赞美角逐中,共有10位评委举办打分,在计较歌手得分时,去掉一个最高分,去掉一个最低分,然后剩余的8位评委的分数举办平均,就是该选手的最终得分。假如已知每个评委的评分,求该选手的得分。

该题实际上涉及到求数组的最大值、最小值,以及求数组中所有元素的和,也是数组利便统计的用途浮现。

实现思路:求出数组元素的最大值、最小值以及和,然后利用和减去最大值和最小值,然后除以8得到得分。

则实现的代码如下:

int[] score = {90,78,90,96,67,86,78,92,79,85};//评委打分
int sum = 0;    //存储和
int max =score[0]; //存储最大值
int min = score[0];//存储最小值
//求和
for(int i = 0;i < score.length;i++){
 sum += score[i];
}
//得到最大值
for(int i = 1;i < score.length;i++){
 //较量
 if(max < score[i]){  max = score[i];
 }
}
//得到最小值
for(int i = 1;i < score.length;i++){
 //较量
 if(min > score[i]){ min = score[i];
 }
}
//计较平均分
double avg = (sum – max – min)/8.0;
System.out.println(avg);

在该代码中,实现数组求和的思路和以前的一样,就是每次加一个元素,然后用获得的功效再和后续的元素依次相加。求最大值的思路是首先假设第一个元素最大,把score[0]赋值给max,然后利用max的值和后续依次较量,假如后续的元素比max大,则把该值赋值给max,然后再和后续的元素较量,求最小值的思路和最大值的思路一样。然后计较平均分就完成了题目标要求。

该代码固然布局较量清晰,可是效率不高,为了追求效率,可以把以上三个轮回归并起来,代码如下:

#p#分页标题#e#

for(int i = 0;i < score.length;i++){
 sum += score[i]; //求和
 //得到最大值
 if(max < score[i]){ max = score[i];}
 //得到最小值
 if(min > score[i]){ min = score[i];}
}

这样固然在布局上稍微巨大了一些,可是效率获得了改进。在实际编写措施时,一般会在成果书写完成今后,对代码举办优化,提高措施的执行效率。

#p#副标题#e#

6.3.4 判定数组元素是否反复

要求:判定一个数组中是否存在沟通的元素,假如存在沟通的元素则输出“反复”,不然输出“不反复”。

该题中假如需要判定数组中元素是否反复,则需要对数组中的元素举办两两较量,假如有任意一组元素相等,则该数组中的元素存在反复,假如任意一组元素都不想等,则暗示数组中的元素不反复。

实现思路:假设数组中的元素不反复,两两较量数组中的元素,利用数组中的第一个元素和后续所有元素较量,接着利用数组中的第二个元素和后续元素较量,依次类推实现两两较量,假如有一组元素沟通,则数组中存储反复,竣事轮回。把较量的功效存储在一个符号变量里,最后判定符号变量的值即可。

则实现的代码如下:

int[] n = {1,2,3,1,0};
boolean flag = true;  //假设不反复
for(int i = 0;i < n.length – 1;i++){ //轮回开始元素
 for(int j = i + 1;j < n.length;j++){ //轮回后续所有元素
  //假如相等,则反复
  if(n[i] == n[j]){
   flag = false;//配置符号变量为反复
   break;   //竣事轮回
  }
 }
}
//判定符号变量
if(flag){
 System.out.println(“不反复”);
}else{
 System.out.println(“反复”);
}

在该代码中,flag变量存储是否反复,true代表不反复,false代表反复。外部轮回中轮回变量i代表第一个元素的下标,内部轮回中轮回变量j代表后续元素的下标,当i为零时和后续所有元素较量,然后当i为1时也和后续所有元素较量,依次类推,这样实现所有元素之间的两两较量。然后假如元素沟通,则代表有反复,把flag变量的值置成flase,竣事轮回。最后按照flag变量的值就可以判定是否反复了。

#p#副标题#e#

6.3.5 判定数组是否对称

要求:判定数组元素是否对称。譬喻{1}、{1,2,0,2,1},{1,2,3,3,2,1}这样的都是对称数组。

该题顶用于判定数组中的元素关于中心对称,也就是说数组中的第一个元素和最后一个元素沟通,数组中的第二个元素和倒数第二个元素沟通,依次类推,假如较量到中间,所有的元素都沟通,则数组对称。

实现思路:把数组长度的一半作为轮回的次数,假设变量i从0轮回到数组的中心,则对应元素的下标就是数组长度-i-1,假如对应的元素有一组不相等则数组差池称,假如所有对应元素都沟通,则对称。

则实现的代码如下:

int[] n = {1,2,0,2,1};
boolean flag = true;//假设对称
for(int i = 0;i < n.length/2;i++){ //轮回数组长度的一半次
 //较量元素
 if(n[i] != n[n.length – i – 1]){
  flag = false;  //差池称
  break;    //竣事轮回
 }
}
if(flag){
  System.out.println(“对称”);
}else{
  System.out.println(“差池称”);
}

在该代码中,flag作为符号变量,值为true代表对称,false代表差池称,因为是两两较量,只需要较量数组的长度一半次即可,假如对应的元素不沟通则数组差池称,竣事轮回。最后判定符号变量的值,就可以得到数组是否对称了。

    关键字:

在线提交作业