Java逻辑流程控制
main函数、顺序结构
Java虚拟机通过main方法找到需要启动的运行程序,并且检查main函数所在的类是否被Java虚拟机装载。如果没有装载,那么就装在该类,并且装载所有相关的其他类。因此程序运行的时候,第一个执行的方法就是main()方法。
public class Main {
public static void main(String[] args) {
System.out.println("main方法是Java程序的入口!");
}
}
顺序结构:自上而下地逐行执行代码
选择结构
选择结构:根据逻辑判断代码的执行顺序
if
满足判断条件,则执行相对应的代码,否则不执行任何代码。
public static void main(String[] args) {
if (true) {
System.out.println("语句1");
System.out.println("语句2");
System.out.println("语句3");
}
System.out.println("语句4");
}
结果:
当条件为false时,结果只有“语句4”输出。
if-else
当条件为true时,执行if中的代码,否则执行else中的代码。
public static void main(String[] args) {
int a = 1;
if (a == 1) {//当代码块中的语句只有1条时,可以省略 {}
System.out.println("a 等于 1");
}else {
System.out.println("a 不等于 1");
}
}
if-else多级嵌套
public static void main(String[] args) {
double score = 99;
if (score < 60) {
System.out.println("不及格!");
} else if (score >= 60 && score < 80) {
System.out.println("及格!");
} else if (score >= 80 && score < 90) {
System.out.println("良好!");
} else {
System.out.println("优秀!");
}
}
switch 多分支选择
例1:
public static void main(String[] args) {
int n = 4;
switch (n) {
case 1: //变量n与case的值匹配,若匹配成功,则执行case中的代码
System.out.println("执行了1");
break; //break会跳出当前switch的作用域。
case 2:
System.out.println("执行了2");
break;
default:
System.out.println("执行了default");
}
}
这里先介绍一个对象Scanner,它是一个用于输入的类,之前的System.out是用来输出的对象。它的参数是System.in,是输入的对象。Scanner常用方法有:
int nextInt()
, double nextDouble()
分别用来读取输入整型和浮点型数据;
nextLine()
是读取输入下一整行内容,next()
是读取输入下一个单词(遇到空格结束),它们都是String类型的;
但是对于char字符类型并没有扫描输入的方法,所以输入字符串类型,给转成char类型,具体方法为next().charAt(0)
。
当我们需要想要执行的条件有多个的时候,不能用逻辑运算符 ||,应该怎么写呢?
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入:");
char c = sc.next().charAt(0);
switch (c) {
case 'a':
case 'A':
System.out.println("您输入了选项A");
break;
case 'b':
case 'B':
System.out.println("您输入了选项B");
break;
default:
System.out.println("您输入了个寂寞!");
}
}
与if-else比较,switch-case的优点在于,可以利用switch的开关功能来实现批处理,增加了代码的可读性,使代码更容易编写,性能更高。缺点是不能嵌套循环。
循环结构
while循环
格式:while(条件){ 循环体}
编写程序,计算1+2+3+…+100的值。
public static void main(String[] args) {
int i = 1;
int sum = 0;
while (i <= 100) {// 执行到while循环时,当()中的条件为true时,就执行循环体中的代码
sum += i;
i++;
}
System.out.println("1+2+3+…+100的值为" + sum);
}
do-while循环
格式:do{ 循环体}while(条件)
public static void main(String[] args) {
int i = 1;
int sum = 0;
do {
sum += i++;
} while (i <= 100);
System.out.println("1+2+3+…+100的值为" + sum);
}
while是先判断,后执行;do-while是先执行,后判断。
for循环
for循环主要用于按预定的次数执行语句或语句块。
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println("1+2+3+…+100的值为" + sum);
}
循环控制
break
break除了在switch中使用,还可以用于循环体中。
在循环体中遇见break语句时,立即结束循环,跳至循环外,执行循环结构后面的语句。
public static void main(String[] args) {
for (int i = 1; i <= 100; i++) {
if (i == 10) {
System.out.println("执行到10跳出循环");
break;
}
System.out.println(i);
}
}
continue
continue用于结束本次循环,即在循环体中遇见continue语句时,continue后面的语句不会执行,直接进行下一次循环的判定。
public static void main(String[] args) {
for (int i = 1; i <= 20; i++) {
if (i == 10) {
System.out.println("本次循环结束!");
continue;
}
System.out.println(i);
}
}
return
Java中return表示立即跳出当前的方法。
有两个作用:
- 返回方法指定类型的值(这个类型是确定的),也可以是对象
- 方法的结束
有两种形式:
3. 有返回类型 例如:return i; return 0;
4. 无返回类型 return;
方法前有void代表无返回值,没有void表示有返回值。
若程序中执行遇到return,则携带返回值立即跳出当前的方法,若return在main方法中,则直接结束程序。
public class Test3 {
public static void main(String[] args) {
System.out.println("程序开始执行:");
// returnVoid();
// int n = returnInt();
// System.out.println(n);
String result = returnString(80);
System.out.println(result);
System.out.println("程序结束执行!");
}
public static void returnVoid() {
for (int i = 0; i < 100; i++) {
if (i == 20) {
System.out.println("跳出了当前方法returnVoid");
return;
}
System.out.println(i);
}
System.out.println("这是后面的代码,不再执行");
}
/**
* 返回一个绝对值
*
* @return
*/
public static int returnInt() {
System.out.println("请输入一个整数:");
int val = new Scanner(System.in).nextInt();
if (val > 0) {
return val;
} else if (val < 0) {
return -val;
}
return 0;
}
/**
* 判断成绩是否及格
*
* @param score
* @return
*/
public static String returnString(double score) {
if (score >= 60) {
return "及格";
} else {
return "不及格";
}
}
}
嵌套循环控制
循环里面放循环,由于太多循环会导致算法时间复杂度彪高,所以不建议超过3层循环。
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j + "x" + i + "=" + i * j + " ");
}
System.out.println();
}
}