本周学习了两个内容,一个是方法,一个是数组。
一.方法
1.方法的定义
修饰符 返回值类型 方法的名字(参数列表){
方法的功能主体
循环、判断、变量、比较、运算
return ;
}
修饰符:(由于我们还没有到面向对象,所以现在的写法为)public static
返回值类型:方法在运算后,返回结果的数据类型
方法的名字:自定义并满足标识符规范,名字首字母小写,后面各单词首字母大写
参数列表:传递数据类型,若多个用逗号隔开。参数列表中包含一个或多个变量的定义。
参数有两种:
形式参数(形参):在方法定义时用于接收外界输入的数据。
实际参数(实参):调用方法时实际传给方法的数据。
2.方法使用的注意事项
(1).方法不能定义在另一个方法里
(2).方法的名称严格区分大小写
(3).若方法的返回值是void,方法中可以省略return不写
(4).方法的返回值类型,和return后面的数据类型一致
3.调用方法
(1).直接调用:方法名(实参列表);
(2).类名调用:类名.方法名(实参列表);
(3).对象调用:对象.方法名(实参列表);(面向对象会使用)
4.方法调用中的参数传递问题
(1).方法参数是基本数据类型,则调用方法时,是传值
(2).方法参数是引用类型,则调用方法时,是传地址
二.数组
1.一维数组的定义
(1).数据类型[] 变量名=new 数据类型[存储元素的个数];
(2).数据类型[] 变量名=new 数据类型[]{元素1,元素2,元素3….};
(3).数据类型[] 变量名={元素1,元素2,元素3….};
数组的一个属性就是数组的长度,属性的名字length,使用属性:数组名.length
2.二维数组的定义
(1).数据类型[][] 变量名=new 数据类型[存储行元素的个数][存储列元素的个数];
(2).数据类型[][] 变量名={{元素1},{元素1,元素3….},{元素1,元素2,元素3….}};
二维数组的length属性就算它所含的“行的个数”
3.遍历数组
(1).for(数据类型 变量名称:数组名称){
}
(2).for(int i=0;i&It;array.length;i++){
system.out.println(array[i]);
}
4.数组拷贝
System类中有一个静态方法:
public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
参数解释:
src: 源数组
srcPos: 源数组的起始位置
dest: 目标数组
destPos:目标数组的起始位置
length:拷贝的数组元素个数
三.递归算法和排序算法
递归调用指的是方法执行过程中出现该方法本身的调用。
递归算法的两个条件:(1).递归出口(结束条件)(2). 逐层递推向出口靠近.
例:作业4:兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子,初始有一对小兔子,假设所有兔子都不死,计算前12个月每个月的兔子对数。
package twoweek;
public class HomeWorkFour {
public static void main(String[] args) {
int month=12;
int x=Rabbit(month);
System.out.println(month+"个月后共有"+x+"对兔子");
}
public static int Rabbit(int month){
if(month==1||month==2){
return 1;
}else{
return Rabbit(month-1)+Rabbit(month-2);
}
}
}
排序算法:冒泡排序,插入排序,快速排序。
1.冒泡排序:共有n个数据,则需要进行n-1趟排序(可优化),每一趟排序都会通过“两两交换”的方式对数据进行比较,每一趟排序后都会将本趟排序的最大值“冒”到后面。
2.插入排序:对一个有n个元素的数据序列,排序需要进行n-1趟插入操作。
第一趟插入将第2个元素插入前面的有序子序列(此时前面只有一个元素)。
第二趟插入将第3个元素插入前面的有序子序列,前面两个元素是有序的。
第n-1趟插入将第n个元素插入前面的有序子序列,前面n-1个元素是有序的。
3.快速排序:从待排序的数据序列中任取一个数据(如第一个数据)作为分界值,所有比它小的数据元素放到左边,所有比它大的数据元素放到它的右边。接下来,对左右两个子序列按照上述方法进行递归排序,直到排序完成。
作业题:1:给定一个int类型的数组,要求:
1.求和
2.求平均数(int)
3.求最大值,最小值
4.打印这个数组中数据
package twoweek;
public class Homeworkone {
public static void main(String[] args) {
int [] arr={42,20,16,12,37,15,80};
int cum=summation(arr);
System.out.println("该数组的和为:"+cum);
average(arr,cum);
compare(arr);
show(arr);
}
public static int summation(int[] a){
int sum=0;
for (int i = 0; i < a.length; i++) {
sum+=a[i];
}
return sum;
}
public static void average(int[] a,int num) {
int aver=num/a.length;
System.out.println("平均值为:"+aver);
}
public static void compare(int[] a){
int max=a[0],min=a[0];
for (int i = 1; i < a.length; i++) {
if(max<a[i]){
max=a[i];
}
if(min>a[i]){
min=a[i];
}
}
System.out.println("最大值为:"+max+" 最小值为:"+min);
}
public static void show(int[] a){
System.out.println("打印该数组:");
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+" ");
}
System.out.println();
System.out.println("排序后的该数组为:");
for (int i = 1; i < a.length; i++) {
for (int j = 0; j < a.length-i; j++) {
if(a[j]>a[j+1]){
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+" ");
}
}
}
2:给定两个整型数组a和b,找出其共同元素。
eg:int[] a={23,12,45,11};
int[] b={99,33,12,45,67,11}
要找出:12,45,11
package twoweek;
public class HomeWorkTwo {
public static void main(String[] args){
int[] a={23,12,45,11};
int[] b={99,33,12,45,67,11};
System.out.println("两数组相同的元素有:");
for(int i=0;i<a.length;i++){
for(int j=0;j<b.length;j++){
if(a[i]==b[j]){
System.out.print(a[i]+" ");
break;
}
}
}
}
}
3: 在某歌唱比赛中,共有10位评委进行打分,在计算歌手得分时,去掉一个最高分,去掉一个最低分,然后剩余的8位评委的分数进行平均,就是该选手的最终得分。
10位评委对某歌手的打分分别是:78、60、85、96、77、66、60、82、88、85。计算该歌手的最终得分。
package twoweek;
public class HomeWorkThree {
public static void main(String[] args) {
int[] a={78,60,85,96,77,66,60,82,88,85};
average(a);
}
public static void average(int[] a) {
int max=a[0],min=a[0],sum=0,end=0;
for(int i=0;i<a.length;i++){
if(max<a[i]){
max=a[i];
}
if(min>a[i]){
min=a[i];
}
sum+=a[i];
}
end=(sum-max-min)/(a.length-2);
System.out.println("该选手去掉一个最高分:"+max+" 分,最低分:"+min+" 分,后的平均分为:"+end);
}
}