目录
顺序结构
多线程就不一定按书写顺序进行了
分支结构
条件表达式不宜过多,最多写俩
不加{}时,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中,所有相同功能的方法,将其定义为相同的名字
方法重载发生在同一个类中,定义了若干个方法名称相同,参数列表不同(参数类型不同或参数个数不同)的一组方法,与返回值无关!
方法递归
在一个方法执行的内部,自己调自己
程序能实现方法递归的原因:当在程序中调用另一个方法时,当前程序会暂停,直到方法调用结束,当前程序才会继续执行
递归行为可以理解为多叉树的遍历,每一个节点要计算值,必须依赖当前节点的子节点。由于这种依赖关系,在没执行到叶子节点前,就相当于不断把节点压入栈中(这实际上是一个递推的过程);到了叶子节点,不再依赖其他节点就可以返回当前值了,于是相当于弹栈(相当于回溯过程)。

什么场景下能用方法递归
- 一个大问题可以拆分为若干个子问题的解
- 拆分后的子问题和原问题除了数据规模不同,解决思路完全相同
- 必须存在递归出口
怎么样写出递归代码
- 写递归函数时,不要纠结这个函数内部怎么实现,而要注意这个方法的语义(这个函数到底有什么功能)。一般在函数内部一开始判断当前情况是否为递归出口,若不是,则执行每个拆分的部分的实现逻辑。
能用递归写出来的逻辑,也一定可以用迭代写出来,反之则不一定。递归容易实现,但是存在大量重复计算。例如,计算斐波那契数列时,计算量随参数的增大呈指数增长。
递归的优化
-
思路一
记忆化搜索(剪枝):已经被计算过的数字就不再重复计算,直接取值即可–利用Map集合
-
思路二
DP(Dynamic Planning)
自底向上的思路
IDEA的调试
设置断点,可以跳过当前行,也可以用逐行调试
杂项
类的命名采用“大驼峰命名法”
IDEA快捷键:鼠标放在代码画波浪线的地方,“Alter + Enter”按键组合可以快速修正错误
本文详细介绍了Java编程中的顺序、分支、循环结构及其注意事项,包括switch语句的使用和基于JDK8的新特性。此外,讲解了方法定义、递归、输入输出操作以及随机数生成,并探讨了方法重载和递归的应用场景。同时,分享了IDEA的调试技巧和编程规范,为Java初学者提供了全面的指导。
1413

被折叠的 条评论
为什么被折叠?



