关于Java的那些事02

目录

一、运算符

1.自增自减运算符

2.短路求值

3.移位运算

4.三目运算符

5.运算符优先级

二、逻辑控制

三、输入

1.循环输入

四、随机数

五、方法

重载

重写

六、递归

1.求n的阶乘

2.递归打出一个数字的每一位

3.输入一个数字求组成这个数字之和

4.求斐波那契第N项


一、运算符

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值