数组这里,我觉得其实可能c用的会更多点,Java这里毕竟以后都是类的对象,类明显的比数组大了好多好多。
首先的work_1是一个成绩统计程序,这个可以用作给新手们讲解的很好实例,比如怎么选方法写,常见功能等。
package Java的数组;
import java.util.Scanner;
/*开始数组的复习
* 首先是,输入若干学生成绩,计算平均数,并且输出高于平均数的成绩的人数
* 1,循环输入成绩,放入数组n[],
* 2,求出sum/n
* 3,遍历数组比较与平均数,大于平均数计数器count加一*/
public class work_1 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int[] score=new int[100];
int sum=0;
double aver;
int count=0,j;
// do{
// System.out.println("请输入第"+(many+1)+"学生成绩,(101结束):");
// score[many]=input.nextInt();
// sum+=score[many];
// many++;
// }while (score[many-1]!=101); //聚聚,我这里把101还算在数组内了,我怎么胡来呢,本来第一次输入101的话就不会执行我还用dowhile
//
for (j=0;j<score.length;j++){
System.out.println("请输入第"+(j+1)+"学生成绩,(101结束):");
score[j]=input.nextInt();
if (score[j]==101)
break;
sum+=score[j];
}
aver=sum/j;
for (int i=0;i<j;i++)
if (score[i]>aver)
count++;
System.out.println("学生的平均成绩是="+aver);
System.out.println("高于平均成绩的有["+count+"]学生");
//输入最高分
int max=score[0];
for (int a=1;a<j;a++)
if (max<score[a])
max=score[a];
System.out.println("最高成绩为:"+max);
//对成绩进行排序
int t,n,m;
for (n=0;n<j;n++)
for (m=n+1;m<j;m++){
if (score[n]>score[m]){
t=score[n];
score[n]=score[m];
score[m]=t;
}
}
System.out.println("成绩排序后:");
for (int k=0;k<j;k++)
System.out.print(score[k]+",");
}
}
排序用的是冒泡排序,还要掌握的一个就是选择排序
选择排序是先找出最小的一个数放在首位,然后在剩下的里面找最小的,把这个数放到最后一位,依次执行下去。
还有就是选择好的循环可以提高程序的正确性和简洁。
然后这个work_2,冥冥之中感觉到之前肯定是见过的,我自己用二维数组写了之后,婶婶学习了书上给的这个方法
package Java的数组;
/*
* 用数组灵活解决实际问题
* 20名学生对食堂饭菜进行评价1~5分,五个等级,并最后对结果进行统计
* 看分析之后可以明白,这就是转化成,求每个X出现的次数
* 这类题一般的解决方法就是,定义两个数组,一个用来放输入的数值,一个用来存放对应的次数
* 此时我想的是次数那么用到了二维数组*/
public class work_2 {
public static void main(String[] args) {
//int[][] count=new int[5][2];
int[] score={3,5,2,3,1,4,1,3,4,5,2,1,3,4,5,2,1,3,4,1};
int i,j,k;
//用二维数组是可以解决,不过还有比较简易的方法
int[] count={0,0,0,0,0,0,};
for (i=0;i<20;i++)
count[score[i]]++; //就是把数值当作了数组下标
System.out.println("分值————人数");
for (j=1;j<6;j++)
System.out.println(j+"————"+count[j]);
// for (i=0;i<5;i++)
// for (j=0;j<2;j++){
// count[i][0]=i+1;
// count[i][1]=0;
// }
//
// for (k=0;k<20;k++)
// for (i=0;i<5;i++)
// if (score[k]==count[i][0])
// count[i][1]++;
// System.out.println("分值——————人数");
// for (i=0;i<5;i++){
// for (j=0;j<2;j++)
// System.out.print(count[i][j]+" ");
// System.out.println();
// }
}
}
把数值当数组下标真的是够聪明的一个方法,真就是给我们提醒着遇见问题要找联系,这里只是1~5的数字,统计的时候肯定也是数字,多多想想,具体情况具体分析的话,在以后解决问题的过程中还是挺好的。
最后的work_3是熟悉的杨辉三角
package Java的数组;
/*
* 今天最后一个是熟悉的杨辉三角
* 讲真,还得想半天
* 循环的关键在:在行的基础上循环列*/
public class work_3 {
public static final int Row=6;
public static void main(String[] args) {
int a[][]=new int[Row][];
for (int i=0;i<Row;i++)
a[i]=new int[i+1]; //初始化每行有多少元素吗是这样的吧
for (int i=0;i<Row;i++)
for (int j=0;j<=a[i].length-1;j++){
if (j==0||i==j)
a[i][j]=1;
else
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
for (int i=0;i<Row;i++){
for (int j=0;j<=a[i].length-1;j++)
System.out.print(a[i][j]+" ");
System.out.println();
}
}
}
注释里面把关键的地方都说了,所以即使你知道这是什么公式求出来的,前面没有铺垫,循环没有搞清,还是写不出来。