上篇讲了一些概念之类的知识点,现在继续总结知识点:
1、用户自己在控制面板输入内容是如何实现的:java中有一个类可实现这个功能
类Scanner:
import java.util.Scanner;
Scanner in=new Scanner(System.in);
int x=in.nextInt();
可以由这三句代码来表示用户输入一个整形数据。
2、逻辑运算符
逻辑运算符有什么用:用于连接两个boolean型的表达式。
比较运算符比较完必定会有结果且是Boolean型
&的运算特点:&运算只要一边一个是false,结果肯定是false,只有两边都是true,结果才是true。
& 与
| 或
^ 异或
! 非
&& 短路与
|| 短路或
在计算机中,非0即真,0为假。一个数异或同一个数两次,结果还是这个数。
逻辑或:或一则一 逻辑与:全一才一
与与短路与的区别?
与:先计算左边表达式,在计算右边表达式,最后做运算,无论左边运算结果是什么,右边都运算。
短路与:先计算左边表达式,如果为真,在计算右边表达式,如果为false直接返回false。如果左边运算结果为false右边不需要参与运算。
短路或与或的区别与短路与与与的区别一样。
3、位移运算符:
左移:a<<b 将二进制的a逐位左移b位,最低位空出的位补零。
无符号右移:a>>b 二进制的a逐位右移b位,最高位空出的位补原符号位。
带符号右移:a>>>b 将二进制的a逐位右移b位,最高空出的位补零。
<< 左移 3<<2=12
>> 右移 3>>1=1 & 与运算 6&3=2 | 或运算 6|3=7
左移几位就是该数据乘以2的几次方。
右移几位就是该数据除以2的几次幂。
4、三目运算符:x?Y:Z
x为Boolean型的表达式,先计算x的值,若为true,整个三目运算的结果为Y,否则为Z。
if(a>1)
b=100;
else b=200; 可以转换成三目运算: b=a>1?100:200;
5、if与switch的区别:
if
1:对具体的值进行判断。
2:对区间的判断。
3:对运算结果是Boolean类型的表达式进行判断。
switch
1、对具体的值进行判断。
2、值得个数一般都是固定的。
对于几个固定的值进行判断,建议使用switch,因为switch将具体的答案加载进内存,效率会高一些。
6、循环语句有三种情况:while , do-- while ,for
第一种:while的格式:
while(条件表达式){
执行语句
}
第二种:do--while的格式:
do{
执行语句
}while(条件表达式);
第三种:for(;;){
执行语句
}
do——while的特点:条件无论是否成立,循环体至少执行一次。
for与while的特点:
(1)、for和while可以互换
(2)、格式上的不同,在使用上有点小区别,如果需要通过变量来对循环体进行控制,该变量值作为循环增量就体现出来来了。
无限循环的用法:
while(true){}
for(;;){}
什么时候使用循环结构呢?
(1)、当对某些代码执行很多次的时候,使用循环结构。
(2)、当对一个条件进行一次判断时用if语句,而对一个条件进行多次判断时,可以使用while语句。
注意:在使用循环时一定要明确哪些语句需要参与循环,那些不需要。循环通常需要定义条件,需要控制次数。
7、break与continnue的用法。
break:跳出。break作用的语句,要么是switch语句,要么是循环语句,当break单独存在时,其后面不要定义其他语句,执行不到。
break跳出单前所在的循环,如果出现了循环嵌套,break想要跳出指定的循环,可通过标号来完成。
continue:继续。结束本次循环继续下次循环。
作用的范围是循环结构,如果continue单独存在时下面不要有任何语句,也执行不到。
8、函数:
函数就是定义在类中的具有特定功能的一段独立小程序,函数也称为方法。
函数的格式:
修饰符 返回值类型 函数名(参数类型,形式参数){
执行语句;
return 返回值;
}
如何定义一个函数?
通过两个明确来完成:
一:这个功能的结果是什么?
二:这个功能实现过程中是否需要未知内容参与运算?
注意:返回值类型和参数类型没有直接关系。
总结:没有具体的返回值时,返回值类型用void表示(也可以不写)。
函数的重载:
在同一个类中,允许存在一个以上的的同名函数,只要他们的参数个数或者参数类型不同即可。
重载的特点:
与返回值类型无关,只看参数列表。
重载的好处:
方便于阅读,优化程序设计
int add(int x,int y){return x+y;}
int add(int x,int y,int z){return x+y+z;} double add(double x,double y){return x+y;}
9、数组的声明:
声明一:int x[];
声明二:int []x=new int[3];
声明三:int []x=new int[]{2,4,6};
int []x={1,3,4,5,6};
求数组的长度:x.length
对数组操作最基本的操作就是存和取,核心思想就是对角标的的操作。
使用数组常见问题:空指针异常(Null PointerException); 数组越界异常(ArrayIndexOutOfBoundsException)
数组常见操作:获取最值(大和小),排序(选择,冒泡排序),折半查找(二分查找)
选择排序法:每一趟从待排的数据元素中选出最小的一个元素,顺序放在已排好序的数列的最后,直到全部待排的数据元素排完。选择排序法是不稳定的排序方法。
选择排序部分代码:
for (int i=0;i<x.length-1;i++){ for(int y=i+1;y<x.length;y++){ if(x[i]>x[y]){ int temp; temp=x[y]; x[y]=x[i]; x[i]=temp; } } }
冒泡排序法:从后往前或者从前往后
比较相连的元素,如果第一个比第二个大就交换他们,对每对相连元素做相同的工作,从第一队到最后一对,在这一点上,最后得数应该是最大数。
持续每次对越来越少的元素重复上次的步骤,直到没有一对数字要比较,相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。
冒泡排序部分代码:
for(int x=0;x<arr.length-1;x++){ for(int y=0;y<arr.length-1-x;y++){ if(arr[y]>arr[y+1]){ int temp=arr[y]; arr[y]=arr[y+1]; arr[y+1]=temp; } } }
什么时候使用数组?
如果数据出现了对应的关系,而且对应关系的一方是有序的数字编号,并作为角标使用,影响到数组的使用,就可以将这些数据存储到数组中。
根据运算的结果直接查数组中对应的元素即可,这种方式称为查表法。
二维数组:
格式一:int [][]arr=new int [3][2];
定义了名称为arr的二维数组,二维数组中有三个一维数组,每个一维数组有两个元素。
格式二:int [][]arr=new int[3][];
二维数组中有三个一维数组,每个一维数组都是默认初始化值null。
格式三:int [][]arr={{},{},{}};
arr.length :二维数组长度,也就是一维数组的个数
arr[1].length :二维数组中角标为1的一维数组长度。
10、(未完。。。)