-
顺序结构⏰
代码一行一行写,执行也是一行一行从上往下去执行,这就是所谓的顺序结构。
-
分支结构
-
if语句:
形式一:
if(布尔表达式){ 内容; }形式二:
if(布尔表达式){ ; }else{ ; }形式三:
if(布尔表达式1){ ; }else if(布尔表达式2){ ; }else{ ; }悬垂else问题:ele总与最接近的if相匹配(不加大括号的时候)
-
Switch语句
switch(整数|枚举|字符|字符串){ case 内容1: 内容满足时要执行的语句; break; case 内容2: 内容满足时要执行的语句; break; ...; default: 语句; break; }break最好不要遗漏,否则失去多分支选择的效果
-
循环结构
- while循环
while(循环条件){//循环条件为true则执行语句,否则不执行 循环语句; }- 注意事项:
- while的语句体不加大括号,循环条件满足只能管一条
- 与if类似,while后面的{与while写在同一行
- 与if类似,while后面不要加封号,否则循环不可正确执行
- break:跳出最近的循环
- continue:跳出本次循环continue一下的代码,转而去执行下一次循环。
2.for循环
for(表达式1;表达式2;表达式3){//1为初始化部分;2为判断部分;3为调整部分 循环体; }3.do while循环
do{ 循环语句; }while(循环条件);至少执行一次
-
java的输出
System.out.println(msg);//输出一个字符串,并换行 System.out.print(msg);//输出一个字符串,不换行 System.out.printf(format,msg);//同C
-
从键盘输入礪
第一步:导入包:import java.util.Scanner;//封号别忘记了
第二步:为从键盘读入作准备:Scanner scan=new Scanner(System.in);
第三步:开始读取:如int a=scan.nextInt();等
-
使用Scanner循环读取N个数字
Scanner sc=new Scanner(System.in);
while(sc.hasNextInt()){
;
}
- 猜数字游戏
import java.util.Scanner;//导入包:Scanner
import java.util.Random;//导入包:Random
public class TestDemo{
public static void menu(){
System.out.println("*********************");
System.out.println("*******0.Exit********");
System.out.println("*******1.Play********");
System.out.println("*********************");
}
public static void game(){
Random random=new Random(System.in);
int rand=random.nextInt(100)+1;//[1,100]
while(true){
int x=scan.nextInt();
if(x>rand){
System.out.println("猜大了")
}else if(x
- 一些值得注意的点⚙️
-
用scanner从键盘读入数据若是既有字符串的读取又有整数的读取,建议先字符串后整数,否则易出bug,这也是java读取时的弊端之一。
-
导包其实是在打开java中的一个资源,类似C中的头文件;最后结束读取时,可以加上一句:
scanner.close();
-
java中的switch语句中:switch后面括号内的东西只能是整数|枚举|字符|字符串
-
java中的for循环判断部分省略也是默认为真。
方法的使用(类似于C中的函数)
- 基本使用
//方法的定义
public static 方法返回值类型 方法名称(形参1,形参2,...){
方法体;
return 返回值;//返回值类型为非void
}
-
方法调用的执行过程
- 与C一样,只有调用一个方法的时候,方法的代码才会被执行
- 方法被调用时,视情况看是否传实参,有时候无形参就不用传实参了
- return后返回主函数(main函数)
- 一个方法可以被多次调用
-
方法调用时的注意事项
- 跟C一样要注意是传值还是传址,当然java中没有地址一说,在java中叫引用,说法是:一个引用指向一个对象。一般地:引用存在JVM虚拟机栈内,而对象存在堆内,函数调用结束,JVM虚拟机栈的方法所占据的内存被回收,但是堆内的东西还在,所以说一句话:在JAVA中返回一个指向对象的引用没事!,不像C中,不可以返回局部变量的地址!
- 对于基础类型来说:形参相当于实参的临时拷贝,即传值调用,对形参的修改不会影响到实参哦。
-
方法的重载(同一个方法名,提供不同版本的实现)
就是说:在C中一个函数的形参类型定死了,那调用这个函数的时候,传过来的实参的类型也必须与之相匹配,否则就掉用不了。而换一个数据类型,想实现相同的功能时,就得重新再编一个函数。在java中,我们可以用相同的函数名,仅修改形参的类型,就可以做到重载,实现上述的目的。注意:返回值是什么类型,不影响重载与否。如:
public static void main(String[] args){
int a=10;
int b=20;
double c=1.1;
double d=1.2;
int sum1=add(a,b);
double sum2=add(c,d);
System.out.println(sum1);
System.out.println(sum2);
}
public static int add(int x,int y){
return x+y;
}
public static double add(double x,double y){
return x+y;
}
重载的规则
- 方法名相同
- 方法的参数不同(参数个数或者参数类型至少一个)
- 方法的返回值类型不影响重载
-
方法的递归
“我调我自己”
案例:
- 打印一个数字的每一位
public static void print(int x){
if(x>9){
print(x/10);
}
System.out.print(x%10);
}
2.递归实现1+2+3+…+10
public static int sum(int x){
if(x>1){
return x+sum(x-1);
}
return x;
}
3.递归实现方法:输入一个非负整数,返回组成它的数字之和,例如:输入1729,则返回1+7+2+9,其和为19.
public static int sum(int x){
if(x>9){
return x%10+sum(x/10);
}
return x;
}
4.求斐波那契数列第n项
public static int fib(int x){
if(x<=2){
return 1;
}else{
return fib(x-1)+fib(x-2);
}
}//该方法重复计算特别多,效率极低,以下再说一遍个递归的方法
public static int fib(int x){
int f1=1;
int f2=1;
int f3=0;
for(int i=3;i<=x;i++){
f3=f1+f2;
f1=f2;
f2=f3;
}
return f3;
}
递归小结
- 有些问题天然就是要使用递归(如斐波那契数列、二叉树等),此时使用递归求解就比较容易
- 有些问题使用递归和非递归都可以解决,那么此时更推荐使用迭代,相比于递归,非递归更加高效。
小总结
- java中的开根号:Math.sqrt(数字),直接用不用导包
- 一个函数的返回值给其他函数使用,这叫链式访问
- java中的方法或者说函数,定义在主函数前面或者后面都是可以的。



