【练习】java分支结构

一、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:

  1. 关于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-elseswitch-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("输入错误!");
        }
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值