JavaSE_02_程序逻辑控制与方法的使用

本文详细介绍了Java编程中的顺序、分支、循环结构及其注意事项,包括switch语句的使用和基于JDK8的新特性。此外,讲解了方法定义、递归、输入输出操作以及随机数生成,并探讨了方法重载和递归的应用场景。同时,分享了IDEA的调试技巧和编程规范,为Java初学者提供了全面的指导。

顺序结构

多线程就不一定按书写顺序进行了

分支结构

条件表达式不宜过多,最多写俩

不加{}时,else根据就近原则匹配与他最近的if分支

规范写法
if(a>0){
    //代码块
}else if(a<0){
    //代码块
}else{
    //代码块
}
细节
int x= 10;
if(x == 20);{    //高级语言后面加上; 代表着这一行语句的结束  此处来看,后面的代码块与前面的条件判别式无关
	sout("aaa");
}    //执行结果,输出aaa
switch(基于JDK8)

switch(),括号里面的数据类型也可以是 byte或short类型的变量,因为对于数值型(byte、short)和字符型,如果是小于4字节的数据类型,在存储时会转为4字节,byte类型在保存时会转为int.

switch(int | char | String | enum){//其他所有类型都不能使用switch
        case 内容一 :
            //执行内容
            break;
        case 内容二 :
            //
            break;
        default :
            //
            break;
}//若不加break,则执行所有满足条件的case,直到遇见break

byte b = 45;
short s = 456;
switch(b) 或者 switch(s)是正确的
循环结构
while()
int i=1,sum=1,ret=0;
while(i<=10){
	sum*=i;
	ret+=sum;
	i++;
}
break

break默认只能终止当前循环。若想在跳出本轮循环的同时跳出外层循环:1. break label 2. return

int num= 100;
test : while(num <= 200){
    int a =1;
    while(a <= 10){
        if((a %3)==0){
            sout(a);
            break test;
        }
        a++;
    }
}//输出结果为3
continue

结束本轮循环,进行下一轮的循环

for()
for(1;2;3){
	//4
}//执行顺序:1 2 4 3 2 4 3 2 4 3……

//1 2 3都是可选的
for(;;)

*快捷键 fori(IDEA),任何循环变量都用fori *

输入输出

输出

System.out.println();    //自带换行的输出
System.out.print();    //不带换行的输出
System.out.printf(format,msg);    //一般不用

占位符

在这里插入图片描述

系统输入:Scanner类

Scanner scanner = new Scanner(System.in);
String name= scanner.nextLine();    //输入字符串
int age= scanner.nextInt();
double salary= scanner.nextDouble();
scanner.hasNextInt();    //返回boolean类型,判断是否输入了一个整型
scanner.hasNextLine();    //字符串
scanner.hasNextDouble();    //浮点型
补充
生成随机数
  • int maxValue = 1000;
    (int)(Math.random()*(maxValue+1))    //得到[0,1000]的任意一个整数
    //Math.random()等概率得到[0,1)的一个小数,因为这些数在存储时精度确定
    
  • Random random = new Random();
    int randomNum = random.nextInt(100)    //生成[0,100)的一个随机整数
    
引用数据类型判断是否相等

使用.equals()方法

String str1 = "abc";
String str2 = "ac";
if(str1.equals(str2)){}
用辗转相除法求两数最大公约数
private static int ouJiLiDe(int num1, int num2){
    while(num1 > 0) {
        int temp = num1;
        num1 = num2 % num1;
        num2 = temp;
    }
    return num2;
}
方法的定义与使用

方法的定义在调用前后均可

Java中没有函数声明这样的概念,一个方法只有函数名和形参而不予以实现是不行的,除非定义为抽象方法

没有返回值的方法仍然可以使用return;,表示终止方法的调用

实参和形参的关系

Java中,方法的参数传递只有值传递,形参的任何操作对实参没有任何影响

overload(重载)

在Java中,所有相同功能的方法,将其定义为相同的名字

方法重载发生在同一个类中,定义了若干个方法名称相同,参数列表不同(参数类型不同或参数个数不同)的一组方法,与返回值无关!

方法递归

在一个方法执行的内部,自己调自己

程序能实现方法递归的原因:当在程序中调用另一个方法时,当前程序会暂停,直到方法调用结束,当前程序才会继续执行

递归行为可以理解为多叉树的遍历,每一个节点要计算值,必须依赖当前节点的子节点。由于这种依赖关系,在没执行到叶子节点前,就相当于不断把节点压入栈中(这实际上是一个递推的过程);到了叶子节点,不再依赖其他节点就可以返回当前值了,于是相当于弹栈(相当于回溯过程)。

在这里插入图片描述

什么场景下能用方法递归
  1. 一个大问题可以拆分为若干个子问题的解
  2. 拆分后的子问题和原问题除了数据规模不同,解决思路完全相同
  3. 必须存在递归出口
怎么样写出递归代码
  1. 写递归函数时,不要纠结这个函数内部怎么实现,而要注意这个方法的语义(这个函数到底有什么功能)。一般在函数内部一开始判断当前情况是否为递归出口,若不是,则执行每个拆分的部分的实现逻辑。

能用递归写出来的逻辑,也一定可以用迭代写出来,反之则不一定。递归容易实现,但是存在大量重复计算。例如,计算斐波那契数列时,计算量随参数的增大呈指数增长。

递归的优化
  1. 思路一

    记忆化搜索(剪枝):已经被计算过的数字就不再重复计算,直接取值即可–利用Map集合

  2. 思路二

    DP(Dynamic Planning)

    自底向上的思路

IDEA的调试

设置断点,可以跳过当前行,也可以用逐行调试

杂项

类的命名采用“大驼峰命名法”

IDEA快捷键:鼠标放在代码画波浪线的地方,“Alter + Enter”按键组合可以快速修正错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AbyssPraise

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值