1.类型转换
1.1隐式转换:byte,short,char --> int --> long --> float --> double由小到大,即隐式转换了
byte b = 3;
int x = b + 2;//这便是一个隐式转换
1.2强制转换类型
//定义两个byte变量
byte a=8;
byte b=5;
//a,b变量在计算的时候先自动转换为int类型再参与计算
int c=a+b;
byte d=a+b;//这里在编译器中会报错,因为a,b是变量,计算时会先提升为int类型,显然int不能隐式转换为byte
byte d1=(byte)(a+b);//这里强转后是可以的
//byte e=a+5;//同理,和上述一样,a是变量,在编译器中也会报错
//这里的8和5是常量,他们优先计算.计算完毕之后,再根据结果来判断数据类型byte f=8+5;//编译成功,这就是常量优先计算原则
2.运算符的几个知识点
2.1算数运算符中的%,/,++以及--
2.1.1 %是取余运算,得到的是两个相除数据的余数; /是除法运算,得到的是两个相除数据的商
其中%一般用于判断两个数是否能够整除。
2.1.2 关于++和--的运算:
当他们单独运算的时候:无论++或者--在数据前面和后面结果都是一样的
其他运算的时候:
如果++或者--在变量的后面,变量是先参与运算,后做++或者--;
如果++或者--在变量前面,变量是先++或者--,后参与运算。
下面给出一段实例:
int a=5;
int b=10;
int c=a++;
int d=++b;
System.out.println(a);//输出6
System.out.println(b);//输出11
System.out.println(c);//输出5
System.out.println(d);//输出11
2.2 &&和&,||和|参与运算的区别
先来看下面实例的运行结果:
从上面程序的运行结果,可以看出&&和&是有区别的:
即&&具有短路效果,如果左边为false,则右边不会执行;&无论左边是什么结果,右边都执行;
同理||也具有短路效果,如果左边为true,则右边不会执行;|无论左边是什么结果,右边都执行。
2.3 三元运算符
三元运算符的具体表达式是:(关系表达式)?表达式1:表达式2
如果关系表达式是true,则运算结果为表达式1;否则运算结果为表达式2.
3. 流程控制语句
3.1选择流程控制语句
3.1.1 if语句
3.1.2 switch语句
来重点说一下switch中的穿透
先来看一个实例:
一年十二个月中,12,1,2是冬季;3,4,5是春季;6,7,8是夏季;9,10,11是冬季,键盘录入合理的数据判断是哪个季节
Scanner sc = new Scanner(System.in);
// 提示输入合适的整数
System.out.println("请输入一个合适的整数:");
int num = sc.nextInt();
switch (num) {
case 12:
System.out.println(num + "月是冬季");
break;
case 1:
System.out.println(num + "月是冬季");
break;
case 2:
System.out.println(num + "月是冬季");
break;
case 3:
System.out.println(num + "月是春季");
break;
case 4:
System.out.println(num + "月是春季");
break;
case 5:
System.out.println(num + "月是春季");
break;
case 6:
System.out.println(num + "月是夏季");
break;
case 7:
System.out.println(num + "月是夏季");
break;
case 8:
System.out.println(num + "月是夏季");
break;
case 9:
System.out.println(num + "月是秋季");
break;
case 10:
System.out.println(num + "月是秋季");
break;
case 11:
System.out.println(num + "月是秋季");
break;
default:
System.out.println("你输入的数字不合理");
break;
上述代码,看上去有很多重复的代码,下面来简化一下上述代码
Scanner sc = new Scanner(System.in);
// 提示输入合适的整数
System.out.println("请输入一个合适的整数:");
int num = sc.nextInt();
switch (num) {
case 12:
case 1:
case 2:
System.out.println(num + "月是冬季");
break;
case 3:
case 4:
case 5:
System.out.println(num + "月是春季");
break;
case 6:
case 7:
case 8:
System.out.println(num + "月是夏季");
break;
case 9:
case 10:
case 11:
System.out.println(num + "月是秋季");
break;
default:
System.out.println("你输入的数字不合理");
break;
简化后的代码功能和为简化后的一样,这就是switch中的穿透,在case匹配的时候,当匹配到对应的数据,没有用break来结束
那么程序会继续执行下一个case中的代码,直到有break结束当前操作。
下面的一个实例也是在阐述switch的穿透作用:
程序的执行过程:先进入switch{}中匹配,发现没有可以匹配的项,因此去执行default中的代码,因为没有break结束流程
因此会继续执行下一个case语句中的代码,同样没有break结束流程,继续执行下一个case语句中的代码,直到switch{}中
的代码执行完毕,因此变量a做了三次++操作,输出结果为7.
4. 数组
4.1打印一个数组到控制台上
//定义一个数组
int [] arr={1,5,2,8,3,10};
//打印数组第一个{
System.out.print("{");
//循环遍历数组
for (int i = 0; i < arr.length; i++) {
//判断是否是最后一个数组元素
if(i==arr.length-1){
System.out.print(arr[i]+"}");
}else{
System.out.print(arr[i]+",");
}
}
输出到控制台上的结果是:{1,5,2,8,3,10}
4.2 数组的普通查找
public static int search(int[] arr,int key){
for(int i=0;i<arr.length;i++){
if(arr[i]==key){ //每一个元素比较
return i;
}
}
return -1;//没有找到,返回-1
}
4.3 数组的选择排序
public static void selectSort(int[] arr){
//外层循环轮数:length-1
for(int i=0;i<arr.length-1;i++){
//内层循环:每一轮比较次数
for(int j=i+1;j<arr.length;j++){
//比较大小,小的往前放
if(arr[i]>arr[j]){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
}
4.4数组的冒泡排序
public static void bubbleSort(int[] arr){
//外层循环:比较length-1轮
for(int i=0;i<arr.length-1;i++){
//内层循环:每一轮比较的次数,从0开始,依次减小
for(int j=0;j<arr.length-i-1;j++){
//j和j+1进行比较
if(arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
4.5数组的折半查找(折半查找的前提是数组是有序的)
public static int binarySearch(int[] arr,int key){
//定义3个变量,start,end,mid
int start=0;
int end=arr.length-1;
int mid=0;
//每次找中的元素,循环找的查找,找完一次,继续折半
//循环条件:start<=end;采用while循环
while(start<=end){
mid=(start+end)/2;
//每次找中间arr[mid]的元素和要找的元素key比较
if(arr[mid]>key){
end=mid-1;
}else if(arr[mid]<key){
start=mid+1;
}else{
return mid;
}
}
return -1; //返回-1表示,没有这个而元素
}
以上内容纯属分享,不用做任何商业用途,如有侵权请联系博主删除。