目录
一、运算符
1.自增自减运算符
后置++:先使用原来的值,表达式结束+1
前置++:使用+1后的值
int a=1;
a++; #a=2
System.out.println(a++); #先使用原来的值,等表达式结束+1,a=2
System.out.println(a); #a=3
++a; #a=4
System.out.println(++a); #使用+1的值,a=5
System.out.println(a); #a=5
2.短路求值
(1)&&:第一个表达式为假则不会执行第二个
(2)||:第一个表达式为真则不会执行第二个
(3)&和|:操作数是整数,是按位与和按位或;操作数是boolean是逻辑运算,不支持短路求值
3.移位运算
(1)左移<<:最右侧补0;相当于数字*2
(2)右移>>:最左侧补符号位(正数补0,负数补1);相当于数字/2
(3)无符号右移>>>:最左侧补0
4.三目运算符
表达式1?表达式2:表达式3
表达式1为true,则结果为表达式2;反之表达式3
5.运算符优先级
+高于>>
二、逻辑控制
1.switch括号内基本类型是byte、char、short、int,引用类型是String常量、枚举类型
三、输入
import java.util.Scanner;
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
int a=sc.nextInt();
float f=sc.nextFloat();
char c=sc.next().charAt(0);
scanner.next()遇见空格结束
不要在nextLine()上方出现nextInt()
1.循环输入
eg:循环输入多组整数
while(sc.hasNextInt()){
int a=sc.nextInt();
}
四、随机数
#默认随机种子是系统时间
Random random=new Random();
#随机种子是2022,即生成的数字与2022有关
#Random random=new Random(seed:2022);
#产生整数随机值0~100
int a=random.nextInt(100);
五、方法
1.方法名字用小驼峰,没有方法说明的说法;
2.方法中的是形参,用来保存调用时实参的值,实参的值是拷贝给形参,形参与实参是两个单独实体;
public static void main(String[] args){
int a=1;
int b=2;
swap(a,b);
System.out.println("a="+a+"b="+b);
#此时输出的a和b没有改变,仍然是1和2,因为只是方法中的形参进行了交换
}
public static void swap(int x,int y){
int tmp=x;
x=y;
y=tmp;
System.out.println("x="+x+"y="+y);
#这里输出的是交换后的值
}
#解决方法:传入引用类型eg:数组
public static void main(String[] args){
int[] a={1,2};
swap(a);
System.out.println("a[0]="+a[0]+"a[1]="+a[1]);
#此时输出的值就是交换的
}
public static void swap(int[] a){
int tmp=a[0];
a[0]=a[1];
a[1]=tmp;
}
3.重载
(1)方法名相同
(2)参数列表必须不同(参数个数不同,参数类型不同,类型的次序不同)
(3)与返回值类型无关
4.重写
(1)方法名相同
(2)返回类型小于等于原本的方法
(3)抛出异常必须是原本的方法抛出异常类型或为其子类型
(4)访问权限必须大于等于原本的方法
六、递归
1.求n的阶乘
public static int fac(int x){
if(x==1){
return 1;
}
return a*fac(a-1);
}
2.递归打出一个数字的每一位
public static void print(int x){
if(x>9){
print(x/10);
}
System.out.print(x%10);
}
3.输入一个数字求组成这个数字之和
public static int add(int x){
if(x<10){
return x;
}
return x%10+add(x/10);
}
4.求斐波那契第N项
public static int fib(int n){
if(n==1||n==2){
return 1;
}
return fib(n-1)+fib(n-2);
}
斐波那契用递归数字较大时,会进行大量重复的运算,效率会很低,所以还是采用循环效率会快
public static int fib(int n){
if(n==1||n==2){
return 1;
}
int a=1;
int b=1;
int cur=0;
for(int i=3;i<=n;i++){
cur=a+b;
a=b;
b=cur;
}
return cur;
}