Java学习第二周(1)--方法与一维数组
声明:由于学习环境为JDK1.8,所有有关Java的代码均在JDK1.8环境中测试通过,若环境发生变换,代码可能会发生错误。
本周的学习难度较上周有明显提升,尤其是涉及到了各种算法的使用和理解,需要更多的练习和归纳。
1.方法的声明与调用
(1)Java的方法类似于其它语言的函数,是一段用来完成特定功能的代码片段
声明格式:[修饰符1 修饰符2 …] 返回值类型 方法名(形式参数列表){
程序代码; 可以有参数,也可以没有参数
[return 返回值]; 跳出方法、返回结果
}
(2)参数有两种: 形式参数(形参):在方法定义时用于接收外界输入的数据。
实际参数(实参):调用方法时实际传给方法的数据。
说明:本节涉及到的方法是由static修饰的静态方法。
(3)方法参数的传递: 1.如果传递的参数是基本数据类型,那么方法接收到的实际上是这个数据的值拷贝(值副本)。
2.如果传递的参数是引用类型,那么传过来的就是这个引用参数的副本,这个副本存放的是参数的地址。
(4)方法返回值: 如果方法没有返回值,返回值类型为void
如果方法有返回值, 方法中必须使用关键字return返回该值,返回值类型为该返回值的类型
如果在方法中直接写return,而没有返回值,则方法结束。
(5)方法的调用: 直接调用:方法名(实参列表);
类名调用:类名.方法名(实参列表);
对象调用:对象.方法名(实参列表);实参的数目、数据类型和次序必须和所调用方法声明的形参列表匹配。
***递归算法(难点)
递归调用:指的是方法执行过程中出现该方法本身的调用。
递归算法的两个条件:(1)递归出口(结束条件) (2)逐层递推向出口逼近
课堂练习:汉诺塔
package com.abc;
import java.util.Scanner;
public class Honoi {
public static int count=1;
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
System.out.println("请输入圆盘个数:");
int num=scan.nextInt();
hanoi(num,'A','B','C');
scan.close();
}
public static void hanoi(int num,char start,char help,char dest){
if(num==1){
System.out.println("这是第"+count+"步移动,从"+start+"移动到"+dest);
count++;
}
else{
hanoi(num-1,start,dest,help);
System.out.println("这是第"+count+"步移动,从"+start+"移动到"+dest);
count++;
hanoi(num-1,help,start,dest);
}
}
}
运行结果:
课后练习:编写一个计算器,实现加减乘除
package com.abc;
import java.util.Scanner;
public class Calculate {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
System.out.print("请输入第一个数:");
int firstNum=scan.nextInt();
System.out.print("请输入第二个数:");
int secondNum=scan.nextInt();
System.out.print("请选择要进行哪种运算?(输入加/减/乘/除) ");
String sel=scan.next();
int result=calculate(firstNum,secondNum,sel);
System.out.print(result);
scan.close();
}
public static int calculate(int a,int b,String oper){
int sum=0;
switch(oper){
case "加":
System.out.print("a加b等于");
sum=a+b;
break;
case "减":
System.out.print("a减b等于");
sum=a-b;
break;
case "乘":
System.out.print("a乘b等于");
sum=a*b;
break;
case "除":
System.out.print("a除b等于");
sum=a/b;
break;
}
return sum;
}
}
运行结果:
2.一维数组的声明、初始化与遍历
数组是一个变量,存储相同数据类型的一组数据
(1)数组的声明、分配空间、赋值
**声明数组: 告诉计算机数据类型是什么
格式:数据类型 数组名[ ] ; 声明数组时不规定数组长度
数据类型[ ] 数组名 ;
**分配空间: 告诉计算机分配几个连续的空间
声明数组并分配空间:数据类型[ ] 数组名 = new 数据类型[大小] ;
**赋值:向分配的格子里放数据(eg:score[0] = 89;)
(2)一维数组的静态初始化:在声明数组时还可以直接指定数组的具体内容。
格式:数据类型[] 数组名={初值0,初值1,…,初值n};
eg: int[] score={65,59,73,71,98,66};
(3)遍历数组方式
1. 通过for循环获取数组元素的下标,然后遍历对应元素
例如: for(int i=0;i<array.length;i++){ length为数组长度属性
System.out.println(array[i]);
}
2. foreach输出
for(数据类型 变量名称:数组名称){...}
例如: for(int x:array){
// x为当前正在遍历的数组元素
}
课堂练习:数组的遍历
package array;
public class ArrayDemo {
public static void main(String[] args) {
int[] a=new int[3];
a[1]=15;
a[2]=7;
System.out.println("遍历第一个数组:");
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
System.out.println();
int[] b={13,53,67,26,78};
System.out.println("遍历第二个数组:");
for(int i=0;i<b.length;i++){
System.out.print(b[i]+" ");
}
System.out.println();
System.out.println("使用foreach方式遍历数组:");
for(int x:b){
System.out.print(x+" ");
}
System.out.println();
}
}
运行结果:
3.补充:方法的可变参数
格式:返回值类型 方法名称(类型… 参数名称){}
eg.void show(int... a){ }
注意:向方法传递可变参数后,参数在方法内部是以数组的形式保存下来的。