【蓝桥杯Java_C组·从零开始卷】第二节、if&switch(超级详细,适合入门强化学习,理论与实战双保险(2021年12月30日上午9点直播·视频发布B站)下

简介: 【蓝桥杯Java_C组·从零开始卷】第二节、if&switch(超级详细,适合入门强化学习,理论与实战双保险(2021年12月30日上午9点直播·视频发布B站)

switch语句三种用法

使用switch这个关键词, 我们可以很好的解决if…else 中多重选择的尴尬场面!


switch 标准方式

flag(标示)表示计算结果, 必须是整性, 字符串类型, 或者枚举类型。

switch (flag){undefined
​ case 0 : 语句一; break;
​ case 1: 语句二; break;
​ default: 语句n; break;
}

标准demo·数字判断

int flag = 3;
switch (flag){
    case 0: System.out.println("The number is 0" ); break;
    case 1: System.out.println("The number is 1" ); break;
    case 2: System.out.println("The number is 2" ); break;
    default: System.out.println("no have choose" ); break;
}

这是一个很标准的 switch 的用法, 有break, 还有 default ,在什么情况下跳出, 在什么情况下结束运行, 都很清楚的说明了, 但是朋友们在写这个代码的时候, 有可能会忘记加入break 或者 忘记 加入 default 这样的问题吧。


String类型switch示例·jdk1.7以上才支持·jdk1.7以下需要使用枚举/hashCode

package Action;
public class HelloWorld {
       public  static  void  main(String args[]) {
         String str =  "C" ;
         switch  (str) {
         case  "A" :
              System.out.println( "A" );
              break ;
         case  "B" :
              System.out.println( "B" );
              break ;
         case  "C" :
              System.out.println( "C" );
              break ;
         default :
              System.out.println( 0 );
         }
       }
}

枚举判断

package Action;
public class HelloWorld {
    static  enum  E {
           A, B, C, D
       }
       public  static  void  main(String args[]) {
           E e = E.B;
           switch  (e) {
           case  A:
               System.out.println( "A" );
               break ;
           case  B:
               System.out.println( "B" );
               break ;
           case  C:
               System.out.println( "C" );
               break ;
           case  D:
               System.out.println( "D" );
               break ;
           default :
               System.out.println( 0 );
           }
       }
}

使用【hashCode】

可以看到hashCode与char是相同的,那么进行数字判断或者其它字符串判断都是一样的,支持硬件更换。

package Action;
public class HelloWorld {
  public static void main(String args[]) {
    String x = "2";
    System.out.println("hashCode:"+x.hashCode());
    System.out.println("char:"+(int) '2');
    int x_int = x.hashCode();
    switch (x_int) {
    case 50:
      System.out.println(2);
      break;
    case 51:
      System.out.println(3);
      break;
    default:
      System.out.println("default");
      break;
    }
  }
}

45.png

巧用break

输出2022年指定月份的最大天数·这里可以替换年份

package Action;
public class HelloWorld {
       public  static  void  main(String args[]) {
         int  year =  2022 ;
         int  month =  2 ;
         int  day =  0 ;
         switch  (month) {
         case  1 :
         case  3 :
         case  5 :
         case  7 :
         case  8 :
         case  10 :
         case  12 :
              day =  31 ;
              break ;
         case  2 :
             boolean b=(year%4==0&&year%100!=0)||year%400==0; 
           day =  b?29:28 ;
              break ;
         case  4 :
         case  6 :
         case  9 :
         case  11 :
              day =  30 ;
              break ;
         }
         System.out.println(day);
       }
}

default作用

default在当前switch找不到匹配的case时执行。default并不是必须的。

package Action;
public class HelloWorld {
       public  static  void  main(String args[]) {
         int  x =  0 ;
         switch  (x) {
         case  1 :
              System.out.println( 1 );
         case  2 :
              System.out.println( 2 );
         default :
              System.out.println( "default" );
         }
       }
}


以下为JAVA_14的语法

46.png


switch - > 用法:

使用 - > 方法更加简单, 就不用使用 break 命令, 保证只有一种路径会被执行!


用法如下:

int flag = 3;
switch (flag){
    case 0 ->  System.out.println("The number is 0" ); 
    case 1 ->  System.out.println("The number is 1" ); 
    case 2 ->  System.out.println("The number is 2" ); 
    default ->  System.out.println("no have choose" ); 
}

去掉了 break 和 冒号 取代的使用 箭头 ->


switch yield 用法:

看到 yield 的时候, 我就在想, 这一定要传值回来的函数。 用法 也很简单,


但是需要注意一点, 传值回去, 外部一定要定义个参数 用来接受这个值。

int flag = 2;
String ss;
ss = switch (flag){
      case 0 ->  "The number is 0" ;
      case 1 ->  "The number is 1" ;
      case 2 ->  {
             String c = "The number is 2";
             yield c;
            }
      default ->  "no have choose";
 };
System.out.println(ss);

47.png

这里来说, switch 作为了 一条语句, 所以末尾要加冒号, 其他用法相同, 下次如果条件很多的话, 就不用使用 if else ,可以考虑使用 switch 中的yield 返回参数方式了!


石头剪刀布 测试代码:

学了switch的这些用法, 我想应该写个程序来试试吧, 所以就写了个石头剪刀布的小游戏

package Action;
import java.util.Scanner;
public class HelloWorld {
    public static void main(String[] args) { ;
        int inp=0;      //定义输入的数值
        String sRnd=""; //随机数表示出拳
        int numWin=0;   //胜场
        int numLost=0;  //负场
        while (true) {
            boolean flag=true;  //立个flag备用
            int rnd = (int) (1 + Math.random() * 3);
            System.out.print("请输入【剪刀】、【石头】或【布】,输入【退出】结束游戏:");
            @SuppressWarnings("resource")
      Scanner sc = new Scanner(System.in);
            String sInp = sc.next();
            switch (sInp) {//输入文字转数字
                case "剪刀":
                    inp = 1;
                    break;
                case "石头":
                    inp = 2;
                    break;
                case "布":
                    inp = 3;
                    break;
                case "退出":
                    System.out.println("您已退出!\n ");
                    return;
                default:
                    System.out.println("输入有误! \n");//输入错误时flag为假
                    flag=false;
                    break;
            }
            switch (rnd) {//随机数转换成出拳
                case 1:
                    sRnd = "剪刀";
                    break;
                case 2:
                    sRnd = "石头";
                    break;
                case 3:
                    sRnd = "布";
                    break;
                default:
                    break;
            }
            if (flag==false){//前面立的flag为假了,跳过这次循环
                continue;
            } else if (inp == rnd) {
                System.out.println("平局! 电脑也是"+sRnd+" 胜"+numWin+"负"+numLost+"\n");
            }  else if (inp == 1 && rnd == 3 || inp == 2 && rnd == 1 || inp == 3 && rnd == 2) { //列出所有胜局情况
                System.out.println("你赢了!电脑是"+sRnd+" 胜"+ ++numWin+"负"+numLost+"\n");
            } else {
                System.out.println("电脑胜!电脑是 "+sRnd+" 胜"+numWin+"负"+ ++numLost+"\n");      //其他都是负局情况
            }
        }
}
        }

48.png

希望能对大家有所帮助,欢迎一键三连。


相关文章
|
1月前
|
自然语言处理 Java
Java中的字符集编码入门-增补字符(转载)
本文探讨Java对Unicode的支持及其发展历程。文章详细解析了Unicode字符集的结构,包括基本多语言面(BMP)和增补字符的表示方法,以及UTF-16编码中surrogate pair的使用。同时介绍了代码点和代码单元的概念,并解释了UTF-8的编码规则及其兼容性。
109 60
|
1月前
|
Java
Java中的控制流语句:if、switch、for、foreach、while、do-while
Java中的控制流语句包括条件判断语句 `if`和 `switch`,以及循环语句 `for`、增强型 `for`(`foreach`)、`while`和 `do-while`。这些语句提供了灵活的方式来控制程序的执行流程,确保代码逻辑清晰且易于维护。掌握这些基本语法,对于编写高效和可读的Java程序至关重要。
56 15
|
27天前
|
存储 缓存 Java
Java中的分布式缓存与Memcached集成实战
通过在Java项目中集成Memcached,可以显著提升系统的性能和响应速度。合理的缓存策略、分布式架构设计和异常处理机制是实现高效缓存的关键。希望本文提供的实战示例和优化建议能够帮助开发者更好地应用Memcached,实现高性能的分布式缓存解决方案。
39 9
|
30天前
|
算法 搜索推荐 Java
【潜意识Java】深度解析黑马项目《苍穹外卖》与蓝桥杯算法的结合问题
本文探讨了如何将算法学习与实际项目相结合,以提升编程竞赛中的解题能力。通过《苍穹外卖》项目,介绍了订单配送路径规划(基于动态规划解决旅行商问题)和商品推荐系统(基于贪心算法)。这些实例不仅展示了算法在实际业务中的应用,还帮助读者更好地准备蓝桥杯等编程竞赛。结合具体代码实现和解析,文章详细说明了如何运用算法优化项目功能,提高解决问题的能力。
62 6
|
30天前
|
算法 Java C++
【潜意识Java】蓝桥杯算法有关的动态规划求解背包问题
本文介绍了经典的0/1背包问题及其动态规划解法。
50 5
|
2月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
103 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
2月前
|
Java
Java基础却常被忽略:全面讲解this的实战技巧!
本次分享来自于一道Java基础的面试试题,对this的各种妙用进行了深度讲解,并分析了一些关于this的常见面试陷阱,主要包括以下几方面内容: 1.什么是this 2.this的场景化使用案例 3.关于this的误区 4.总结与练习
|
2月前
|
监控 架构师 Java
Java虚拟机调优的艺术:从入门到精通####
本文作为一篇深入浅出的技术指南,旨在为Java开发者揭示JVM调优的神秘面纱,通过剖析其背后的原理、分享实战经验与最佳实践,引领读者踏上从调优新手到高手的进阶之路。不同于传统的摘要概述,本文将以一场虚拟的对话形式,模拟一位经验丰富的架构师向初学者传授JVM调优的心法,激发学习兴趣,同时概括性地介绍文章将探讨的核心议题——性能监控、垃圾回收优化、内存管理及常见问题解决策略。 ####
|
2月前
|
Java 程序员
Java基础却常被忽略:全面讲解this的实战技巧!
小米,29岁程序员,分享Java中`this`关键字的用法。`this`代表当前对象引用,用于区分成员变量与局部变量、构造方法间调用、支持链式调用及作为参数传递。文章还探讨了`this`在静态方法和匿名内部类中的使用误区,并提供了练习题。
56 1
|
3月前
|
存储 安全 Java
Java多线程编程中的并发容器:深入解析与实战应用####
在本文中,我们将探讨Java多线程编程中的一个核心话题——并发容器。不同于传统单一线程环境下的数据结构,并发容器专为多线程场景设计,确保数据访问的线程安全性和高效性。我们将从基础概念出发,逐步深入到`java.util.concurrent`包下的核心并发容器实现,如`ConcurrentHashMap`、`CopyOnWriteArrayList`以及`BlockingQueue`等,通过实例代码演示其使用方法,并分析它们背后的设计原理与适用场景。无论你是Java并发编程的初学者还是希望深化理解的开发者,本文都将为你提供有价值的见解与实践指导。 --- ####