java之逻辑控制+方法的使用
-
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(循环条件){
循环语句;
}
- 注意事项:
- while的语句体不加大括号,循环条件满足只能管一条
- 与if类似,while后面的{与while写在同一行
- 与if类似,while后面不要加封号,否则循环不可正确执行
- break:跳出最近的循环
- continue:跳出本次循环continue一下的代码,转而去执行下一次循环。
2.for循环 for(表达式1;表达式2;表达式3){
循环体;
}
3.do while循环 do{
循环语句;
}while(循环条件);
至少执行一次 -
java的输出🗡 System.out.println(msg);
System.out.print(msg);
System.out.printf(format,msg);
-
从键盘输入🦅 第一步:导入包: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;
import java.util.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;
while(true){
int x=scan.nextInt();
if(x>rand){
System.out.println("猜大了")
}else if(x<rand){
System.out.println("猜小了")
}else{
System.out.println("恭喜你猜对了!");
break;
}
}
}
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
int input=0;
do{
System.out.println("请选择:");
input=scan.nextInt();
switch(input){
case 1:
game();
break;
case 0:
System.out.println("退出游戏成功");
break;
default:
System.out.println("输入有误");
break;
}
}while(input);
}
}
-
用scanner从键盘读入数据若是既有字符串的读取又有整数的读取,建议先字符串后整数,否则易出bug,这也是java读取时的弊端之一。 -
导包其实是在打开java中的一个资源,类似C中的头文件;最后结束读取时,可以加上一句: scanner.close(); -
java中的switch语句中:switch后面括号内的东西只能是整数|枚举|字符|字符串 -
java中的for循环判断部分省略也是默认为真。
方法的使用(类似于C中的函数)
public static 方法返回值类型 方法名称(形参1,形参2,...){
方法体;
return 返回值;
}
-
方法调用的执行过程
- 与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中的方法或者说函数,定义在主函数前面或者后面都是可以的。
|