欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

if-esle选择结构的细节

程序员文章站 2022-04-01 20:47:29
if-esle的细节参考网址:前言在平时的项目中需要基本每天都会用到if-else,但是过多的if-else对于看代码的人来说就有点晦涩难懂,而且if-else中还有一些小坑,正好今天写了一大窜的if-else,这个时候正好整理一下主要两点(自己终结,可能不到位)1.if-else的坑2.if-esle的简化为啥要简化if-else参考文献阿里开发规范-嵩山版如果非使用 if()...else if()...else...方式表达逻辑,避免后续代码维护困难,请勿超过 3 层。超过...

if-esle的细节

参考网址:

前言

在平时的项目中需要基本每天都会用到if-else,但是过多的if-else对于看代码的人来说就有点晦涩难懂,而且if-else中还有一些小坑,正好今天写了一大窜的if-else,这个时候正好整理一下

主要两点(自己终结,可能不到位)

1.if-else的坑

2.if-esle的简化

为啥要简化if-else

参考文献

阿里开发规范-嵩山版

如果非使用 if()...else if()...else...方式表达逻辑,避免后续代码维护困难,请勿超过 3 层。

超过 3 层的 if-else 的逻辑判断代码可以使用卫语句、策略模式、状态模式等来实现,其中卫语句

if-esle选择结构的细节

1.if-esle的小坑

说明:

我之前总结过一次,不过好久了,有点忘了,是这个帖子

https://blog.csdn.net/shaoming314/article/details/107898574

我们的目的是当i<20时,输出2

  • 正确的代码1
  @Test
    public void testManyIfElse(){
        int i = 15;
        if(i<10) {
            System.out.println("1");
        }else if(i<20) {
            System.out.println("2");
        }else if(i<30) {
            System.out.println("3");
        }else {
            System.out.println("4");
    }
    }
/*
控制台打印
2
*/

  • 错误的代码1
  @Test
    public void testForNoElseIf(){
        int i = 15;
        if(i<10) {
            System.out.println("1");
        }
        if(i<20) {
            System.out.println("2");
        }
        if(i<30) {
            System.out.println("3");
        }
        if(i<30) {
            System.out.println("4");
        }
    }
/*
控制台打印
2
3
4
*/
  • 错误代码2
  @Test
    public void testForNoElseIf(){
        int i = 15;
        if(i<10)
            System.out.println("1");
        if(i<20)
            System.out.println("2");
        if(i<30)
            System.out.println("3");
        if(i<30)
            System.out.println("4");
    }
/*
控制台打印
2
3
4
*/

说明:

错误代码2

这样在idea里面书写还会代码会显示又下划线红线

idea不建议这样书写(idea时真的智能,哈哈)

if-esle选择结构的细节

推荐的时错误代码1的那种书写方式,但是那样书写也是错的

  • 正确代码2
@Test
    public void testForNoIfElse3(){
        int i = 15;
        if(i<10) {
            System.out.println("1");
            return;
        }
        if(i<20) {
            System.out.println("2");
            return;
        }
        if(i<30) {
            System.out.println("3");
            return;
        }
        if(i<30) {
            System.out.println("4");
            return;
        }
    }
  /*
        控制台打印:
        2
         */

说明:

return这个关键字不一定只用在返回方法返回值

也可以用于如果正确就返回,类似于switch-case中break的使用

2.复习swith-case

说明:

相较于if-else,switch-case的代码相对简洁

  • 错误的示例代码
 @Test
    public void testswitchCaeError() {
        int week = 3;
        switch (week) {
            case 1:
                System.out.println("Monday");
            case 2:
                System.out.println("Tuesday");
            case 3:
                System.out.println("Wednesday");
            case 4:
                System.out.println("Thursday");
            case 5:
                System.out.println("Friday");
            case 6:
                System.out.println("Saturday");
            case 7:
                System.out.println("Sunday");
            default:
                System.out.println("No Else");
        }
        /*
        控制台输出:
        Wednesday
        Thursday
        Friday
        Saturday
         */
    }
  • 正确的示例代码
 /**
     * 正确的示例代码
     * 正常情况下,switch-case是要配合break使用的
     * 但是有时候,swithc-case做一些特殊业务又可以不用break配合(这种情况很少)
     */
    @Test
    public void test1(){
        int week = 2;
        switch (week) {
            case 1:
                System.out.println("Monday");
                break;
            case 2:
                System.out.println("Tuesday");
                break;
            case 3:
                System.out.println("Wednesday");
                break;
            case 4:
                System.out.println("Thursday");
                break;
            case 5:
                System.out.println("Friday");
                break;
            case 6:
                System.out.println("Saturday");
                break;
            case 7:
                System.out.println("Sunday");
                break;
            default:
                System.out.println("No Else");
                break;
        }
    }
  • swith-case不使用break控制的示例代码
package com.shaoming.流程控制语句;

import java.util.Scanner;

/**
 * @author Admin
 * @Auther: shaoming
 * @Date: 2020/11/26 23:25
 * @Description:
 * 计算某一天时一年的第多少天
 */
public class SwitchCaseTestYearDay {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        System.out.println("请输入2019的month");
        int month = scan.nextInt();
        System.out.println("请输入2019的day");
        int day = scan.nextInt();
        int sumDays = 0;

		/*switch(month){
			case 1:
				sumdays = day;
			break;
			case 2:
				sumdays = 31 + day;
		    break;
			case 3:
				sumdays = 31 + 28 + day;
			break;
			....
			....
			用+=

			*/
        switch(month){
            case 12:
                sumDays += 30;
            case 11:
                sumDays += 31;
            case 10:
                sumDays += 30;
            case 9:
                sumDays += 31;
            case 8:
                sumDays += 31;
            case 7:
                sumDays += 30;
            case 6:
                sumDays += 31;
            case 5:
                sumDays += 30;
            case 4:
                sumDays += 31;
            case 3:
                sumDays += 28;
            case 2:
                sumDays += 31;
            case 1:
                sumDays += day;



        }
        System.out.println("2019年" + month + "月" + day + "日是当年的第" + sumDays + "天" );


    }
}

3.if-esle的简化写法总结

3.1完全不必要的Else块

  • 正常代码

说明:

这里说的正常代码就是我平时写代码时候的写法,不知道平时别人时怎么写的

 @Test
    public void testFor(){
        int i = 1;
        if(i==1){
            System.out.println("i==1");
        }else{
            System.out.println("i!=1");
        }
        /*
        控制台输出:
          i==1
         */
    }
  • 简化后错误的代码
@Test
    public void testForSimpleToMakeError(){
        int i =1;
        if(i==1){
            System.out.println("i==1");
        }
            System.out.println("i!=1");
        /*
        控制台输出
         i==1
         i!=1
         */
    }
  • 简化后正确的代码
 @Test
    public void testForSimple(){
        int i =1;
        if(i==1){
            System.out.println("i==1");
            return;
        }
            System.out.println("i!=1");
        /*
        控制台输出
         i==1
         */
    }

说明:

return起到拦截的作用,否则还会执行方法体外的方法

Java中return用于方法,两个作用:
(1)返回方法指定类型的值(这个值总是确定的),也可以是对象
(2)方法的结束

3.2 价值分配

说明:

中国人就是把一些名词说的高大上,愣是没听懂,但是实现比较简单,而且这种形式代码更加简洁,值得学习

  • 修改前的代码
 public static String getValue(int input){
        String gender = "";
        if(input==0){
            gender="male";
        }else if(input==1){
            gender="woman";
        }else{
            gender="unknown";
        }
        return gender;
    }
  • 我平时书写的方式

 /**
     * 我平时的写法
     */
    public static String getValueByMyDoing(int input){
        if(input == 0){
            return "male";
        }else if(input==1){
            return "woman";
        }else {
            return "unknown";
        }
    }
  • 简洁的书写方式
  /**
     * 简化后的写法
     */
    public static String  getValueSimple(int input){
        if(input==0)return "male";
        if(input==1)return "woman";
        return "unknown";
    }

测试

package com.shaoming.流程控制语句;

/**
 * @Auther: shaoming
 * @Date: 2020/11/26 23:54
 * @Description:
 */
public class testForSimpleDoing {
    public static String getValue(int input){
        String gender = "";
        if(input==0){
            gender="male";
        }else if(input==1){
            gender="woman";
        }else{
            gender="unknown";
        }
        return gender;
    }
    /**
     * 我平时的写法
     */
    public static String getValueByMyDoing(int input){
        if(input == 0){
            return "male";
        }else if(input==1){
            return "woman";
        }else {
            return "unknown";
        }
    }
    /**
     * 简化后的写法
     */
    public static String  getValueSimple(int input){
        if(input==0)return "male";
        if(input==1)return "woman";
        return "unknown";
    }
    //使用main方法对三个方法进行测试
    public static void main(String[] args) {
        System.out.println(getValue(11));
        System.out.println(getValueByMyDoing(11));
        System.out.println(getValueSimple(11));
    }
}

4.总结

参考的网址还有对if-else别的简洁处理,但是平时我也没用到,没体会到

if-else,switch-case,三元运算

swithc-case和三元运算都可以转换成if-else,反之则不行,所以实在行不通的时候我们在去尝试if-esle,并且写if-else的同时保持代码的简洁

个人博客网址:www.shaoming.club

if(input==1)return "woman";
    return "unknown";
}
//使用main方法对三个方法进行测试
public static void main(String[] args) {
    System.out.println(getValue(11));
    System.out.println(getValueByMyDoing(11));
    System.out.println(getValueSimple(11));
}

}


## 4.总结

参考的网址还有对if-else别的简洁处理,但是平时我也没用到,没体会到

if-else,switch-case,三元运算

`swithc-case和三元运算都可以转换成if-else,反之则不行,所以实在行不通的时候我们在去尝试if-esle,并且写if-else的同时保持代码的简洁`





个人博客网址:www.shaoming.club



<img src="https://gitee.com/shao_ming314/picture/raw/master/image/halo.jpg" alt="halo" style="zoom:50%;" />

本文地址:https://blog.csdn.net/shaoming314/article/details/110211597