1 数组(二)
1)for-each循环:增强的for循环,JDK1.5推出的,用来输出数组和集合中每一个元素的值。
for(数据类型 变量 : 数组名){
变量:临时保存元素的值
}
数据类型必须跟数组是同一个类型
案例:Demo1
public class Demo1 { //for-each:增强的for循环,主要用来输出数组中每一个 //元素的值 //格式:for(数据类型 变量 : 数组名){ // 变量:临时保存数组中每一个元素值 // } public static void main(String[] args) { int[] ary = new int[100]; for(int i=0;i<=ary.length-1;i++){ ary[i] = i; } for(int num : ary){ System.out.println(num); } } } //Demo2: 创建一个double类型数组ary,包含200个 //元素,分别把1~200之间的每一个整数依次给ary数组 //中元素赋值 //使用两种for循环,分别输出每一个元素的值。 public class Demo2 { public static void main(String[] args) { double[] ary = new double[200]; for(int i=0;i<=ary.length-1;i++){ ary[i] = i+1; } //for-each for(double num : ary){ System.out.println(num); } //for System.out.println(); System.out.println(); System.out.println(); for(int i=0;i<=ary.length-1;i++){ System.out.println(ary[i]); } } }
总结:for-each循环结构简单,功能较为单一,仅仅只能取出元素的值。for循环操作数组元素,功能强大,但是结构复杂。
案例:Demo3
public class Demo3 { //创建一个int类型数组ary,包含了500个元素,分别把 //1~500之间的每一个整数依次给ary数组元素赋值。 //1 使用两种for循环输出每一个元素的值 //2 累加求和:求出所有元素的累加之和 // sum = sum + ary[i] //3 求出元素的平均值: public static void main(String[] args) { int[] ary = new int[500]; //1 给元素赋值 for(int i=0;i<=ary.length-1;i++){ ary[i] = i+1; } //2 for输出每一个元素值 for(int i=0;i<=ary.length-1;i++){ System.out.println(ary[i]); } //3 for-each输出每一个元素值 for(int num : ary){ System.out.println(num); } //4 累加求和:sum = sum + ary[i] int sum = 0; for(int i=0;i<=ary.length-1;i++){ sum = sum + ary[i]; } System.out.println("元素累加之和:"+sum); //5 元素平均值 double avg = sum/500.0; System.out.println("元素平均值:"+avg); } }
2)数组的初始化:在创建数组的同时直接给数组元素赋值,称为数组的初始化。数组的初始化分为两种,静态初始化和动态初始化。
3)静态初始化:
格式:
数据类型[] 数组名 = { 元素值1,元素值2,元素值3...};
eg:
int[] ary = {1,2,3,4,5,6,7,8,9,10};
在静态初始化中,不需要指定元素的个数,有多少个元素值,就有多少个元素。
案例:Demo4
public class Demo4 { //静态初始化: //格式: //数据类型[] 数组名={元素值1,元素值2,元素值3...}; public static void main(String[] args) { int[] ary = {1,2,3,4,5,6,7,8,9,10}; System.out.println(ary.length); for(int num : ary){ System.out.println(num); } } } public class Demo5 { public static void main(String[] args) { double[] ary = {1.33,2.56,3.87,4.91, 5.66,6.99,7.43,8.11,9.99, 100.66}; //使用两种for输出每一个元素的值 for(int i=1;i<=ary.length-1;i++){ System.out.println(ary[i]); } for(double num : ary){ System.out.println(num); } //求出所有元素累加之和,可以考虑使用for-each求出 //累加之和 double sum=0; for(double num : ary){ sum = sum + num; } System.out.println("元素累加之和:"+sum); } }
4)动态初始化:
格式:
数据类型[] 数组名 = new 数据类型[]{ 元素值1,元素值2,元素值3...};
eg:
int[] ary = new int[]{1,2,3,4,5,6,7,8,9,10};
动态初始化中,不要指定元素的个数,有多少个元素值就有多少个元素
案例:Demo6
public class Demo6 { //动态初始化: //格式: //数据类型[] 数组名 = // new 数据类型[]{元素值1,元素值2,元素值3...} //动态初始化的时候,不要指定元素的个数,有多少个 //元素值,就有多少个元素 public static void main(String[] args) { int[] ary = new int[]{100,200,300, 400,500,600,10000,20000}; for(int num : ary){ System.out.println(num); } } } public class Demo7 { public static void main(String[] args) { String[] ary = new String[]{"徐达","常遇春","李文忠", "朱文正","冯胜","蓝玉","朱棣", "戚继光","李如松","卢象升"}; //使用两种for循环分别输出每一个元素的值 for(String str : ary){ System.out.println(str); } for(int i=0;i<=ary.length-1;i++){ System.out.println(ary[i]); } } }
2 switch语句
多分支选择语句的一种,功能跟if-else-if很相似,但是由于结构较为复杂,在企业中没有if-else-if使用广泛,但是在嵌套的选择语句中,建议使用switch语句,结构比较清晰。
1)格式:
switch(整型表达式){
case 整数值1:
语句1
break;
case 整数值2:
语句2
break;
case 整数值3:
语句3
break;
...
default:
语句n
}
2)语法规则:首先判断switch中整型表达式的值,整型表达式的值等于某一个分支case中的整数值,执行对应分支case中的语句,遇到break,退出整个switch语句;如果switch中整型表达式的值跟任何一个分支case中的整数值都不同,执行默认default中的语句n。
3)switch中的整型表达式的结果的类型,可以是byte,short,int,char,在jdk1.7以及jdk1.8支持使用String。
4)break:遇到break直接退出switch语句。如果执行完分支case中语句以后,没有遇到break,会继续执行下一个分支case...直到遇到break,退出switch语句。
案例:Demo8
import java.util.Scanner; public class Demo8 { //从控制台输入任意的一个整数,输出对应的操作 //1 登录 2 查询 3 注册 4 修改 5 退出 //其他值 输入错误 public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入操作(1~5):"); int opt = sc.nextInt(); switch(opt){ case 1: System.out.println("登录"); break; case 2: System.out.println("查询"); break; // 3 注册 4 修改 5 退出 case 3: System.out.println("注册"); break; case 4: System.out.println("修改"); break; case 5: System.out.println("退出"); break; default: System.out.println("输入错误"); } } } import java.util.Scanner; public class Demo9 { //从控制台输入1~7数字,输出对应星期几 //1 星期一 2 星期二 3 星期三 4 星期四 //5 星期五 6 星期六 7 星期日 //其他值 输入错误 public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入一个整数:"); int num = sc.nextInt(); switch(num){ case 1: System.out.println("星期一"); break; case 2: System.out.println("星期二"); break; case 3: System.out.println("星期三"); break; case 4: System.out.println("星期四"); break; case 5: System.out.println("星期五"); break; case 6: System.out.println("星期六"); break; case 7: System.out.println("星期日"); break; default: System.out.println("输入错误"); } } } import java.util.Scanner; public class Demo10 { //从控制台输入一个整数(0~5)作为分数,输出对应的 //优秀,良好,及格,不及格以及输入错误 //5 优秀 //4 良好 //3 及格 //2,1,0 不及格 //其他值 输入错误 public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入分数:"); int score = sc.nextInt(); switch(score){ case 5: System.out.println("优秀"); break; case 4: System.out.println("良好"); break; case 3: System.out.println("及格"); break; case 2: case 1: case 0: System.out.println("不及格"); break; default: System.out.println("输入错误"); } } }
综合案例:从控制台输入两个整数,分别作为年份和月份,根据年份和月份,输出本月有多少天
大月(31天):1,3,5,7,8,10,12
小月(30天):4,6,9,11
2月:闰年 29天 非闰年 28天
月份输入其他值,显示输入错误
if(month==1||month==3||5,7,8,10,12){
31天
}else if(4,6,9,11){
30天
}else if(2){
闰年29天 非闰年28天
}
switch(month){
case 1: 31天 break
case 3: 31天 break
...
case 4: 30天 break
case 6: 30天 break
...
case 2:
if(闰年){
29天
}else{
28天
}
break
}
import java.util.Scanner; public class Demo11 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入年份:"); int year = sc.nextInt(); System.out.println("请输入月份:"); int month = sc.nextInt(); //1 大月:1,3,5,7,8,10,12 if(month==1||month==3||month==5|| month==7||month==8|| month==10||month==12){ System.out.println("31天"); //2 小月: 4,6,9,11 }else if(month==4||month==6|| month==9||month==11){ System.out.println("30天"); //3 2月:闰年 29天,非闰年28天 }else if(month==2){ if((year%4==0&&year%100!=0)|| year%400==0){ System.out.println("29天"); }else{ System.out.println("28天"); } }else{ System.out.println("输入错误!"); } } } import java.util.Scanner; public class Demo12 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入年份:"); int year = sc.nextInt(); System.out.println("请输入月份:"); int month = sc.nextInt(); switch(month){ case 1: case 3: case 5: case 7: case 8: case 10: case 12: System.out.println("31天"); break; case 4: case 6: case 9: case 11: System.out.println("30天"); break; case 2: if((year%4==0&&year%100!=0)|| year%400==0){ System.out.println("29天"); }else{ System.out.println("28天"); } break; default: System.out.println("输入错误"); } } }
3 方法
把具有一定业务功能的代码聚合在一起,可以被外界反复进行调用。
1)格式:
static 返回值类型 方法名(参数列表){
方法体
}
static:下周详细讲,方便方法的调用。静态的。
返回值类型:方法被调用的时候,最终返回结果的数据类型,如果该方法没有返回值,返回值类型的位置使用void。
方法名:方法的标识。
参数列表:0个或者多个参数,当方法被调用的时候,接收外界传入的数据
方法体:是方法的具体实现。
static void show(){
System.out.println("努力学习");
System.out.println("努力工作");
System.out.println("努力挣钱");
}
main(){
System.out.println("调用show()方法之前");
show();
System.out.println("调用show()方法之后");
}
当方法执行结束以后,返回到调用的位置继续往下执行。
2)在main方法中,调用方法
main(){
方法名(参数);
}
main()是程序的入口,程序都是从main方法开始逐行的往下执行,一直执行到末尾为止。
案例:Demo13
public class Demo13 { //方法:把具有一定业务功能的代码聚合在一起,可以被 //外界反复调用。 //格式: //static 返回值类型 方法名(参数列表){ // 方法体 //} //static :静态的,下周讲,方便方法的调用 //返回值类型:方法被调用以后,最终返回的结果的数据 //类型,如果该方法没有返回值,在返回值类型的位置 //使用void。 //方法名:方法的标识 //参数列表:0个或者多个参数,当方法被调用的时候, //接收外界传入的数据。 //方法体:方法的具体实现。 //main()方法是程序的入口,都是从main()方法开始 //逐行的往下执行,一直执行到末尾为止。 //方法执行结束以后,返回到调用的位置继续往下执行。 }