一、if-else和switch-case
1.1程序控制语句
- break
循环中:直接结束一个循环,跳出循环体,其后循环体内的语句不执行,循环体外的继续执行。
switch-case中:遇到break,跳出switch,执行switch外语句。
package cn.lcy.day0418;
public class eeee {
public static void main(String[] args) {
for(int i=0;i<3;i++){
System.out.println("i=" + i);
if(i==1) break;
System.out.println("break之后");
}
System.out.println("循环结束");
}
}
//Run: i=0
// break之后
// i=1
// 循环结束
- continue
仅可使用于循环:结束本次循环并跳出,本次循环后的语句不执行,直接进行下次循环。
- return
跳出当前方法,返回调用该方法的地方继续执行。
package cn.lcy.day0418;
public class test {
public static void main(String[] args) {
int s = myReturn();
System.out.println("s: " + s);
}
public static int myReturn() {
int i;
for (i = 0; i < 5; i++) {
System.out.println(i);
if (i == 2)
return i;
}
return i;
}
}
//Run:0
// 1
// 2
// s: 2
1.2 if-else/switch-case
- if-else
if() {}//if if() {}//if...else else {} if() {}//if...else if...else else if() {} else {} if() {//if...else嵌套 if() {} else {} } else {}
- switch-case
一旦switch表达式与某个case分支匹配,则从该分支的语句开始执行,一直执行下去,即其后的所有case分支的语句也会被执行(包括default),直到遇到break。
PS:
- 关于default
>它用来执行匹配不存在时所需要的操作。
>仅可选一次,且可写可不写。
>包含在switch内,可与任意case语句调换位置,并影响输出:
1)无break且无匹配项
1.1)当default处于第一行:执行所有行代码
1.2)当default处于于第一行:执行default及其后面的代码
package cn.lcy.day0418;
public class eeee {
public static void main(String[] args) {
String s = "x";
switch (s) {//表达式:整型、enum枚举类型、String类型
case "a"://常量表达式、枚举常量
System.out.println("匹配成功a");
break;
case "x":
System.out.println("匹配成功x");
break;
default:
System.out.println("default");
break;//每句加break,防止case穿透
}
System.out.println("结束");
}
}
//Run: 匹配成功x
// 结束
1.3两者差异
if-else | switch-case | |
应用范围 | √ | |
响应时间 | √(条件较少) | √(条件较多) |
二、练习
1.(力扣.32)输入仅包含小括号的字符串,判断其最长有效(格式正确且连续)括号子串的长度。
如:输入:"(())())()()" 最大有效长度为 2
解题思路:遍历两边:先从左往右遍历,遇到左或右括号分别给相应计数器加1,当left==right时更新最大有效长度,当right>left舍弃之前符号;后从右往左遍历,类似操作。遍历两次是因为要避免单次遍历所造成的特殊情况的遗失(如从左往右遍历,丢失left>right一直成立的情况)。
package cn.lcy.day0418;
import java.util.Arrays;
import java.util.Scanner;
public class test {
public static void main(String[] args) {
System.out.println("输入仅包含小括号的字符串:");
String x=new Scanner(System.in).next();
System.out.println(longestLength(x));
}
public static int longestLength(String s) {
if(s.length() < 2)
return 0;
int left = 0, right = 0, maxLength = 0;
for(int i = 0; i < s.length(); i++) {
if(s.charAt(i) == '(') left++;//字符串可以用s.charAt(i)遍历每一个字符
else right++;
if(left == right) maxLength = Math.max(maxLength, 2 * right);//更新maxLength
else if(right > left) left = right = 0;//舍弃之前的符号
}
left = right = 0;
for(int j = s.length() - 1; j >= 0; j--) {
if(s.charAt(j) == '(') left++;
else right++;
if(left == right) maxLength = Math.max(maxLength, 2* left);
else if(left > right) left = right = 0;
}
return maxLength;
}
}
2.从键盘输入字母,输出等级。
package cn.lcy.day0418;
import java.util.Scanner;
public class test {
public enum Index {
A, B, C, D
}
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("请输入你的等级(A/B/C/D):");
String input = s.next();
Index level = Index.valueOf(input);//创建枚举对象,并用字符串返回对象
switch(level) {
case D:
System.out.println("丁等");
break;
case C:
System.out.println("丙等");
break;
case B:
System.out.println("乙等");
break;
case A:
System.out.println("甲等");
break;
default:
System.out.println("输入错误!");
}
}
}