if-esle选择结构的细节
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 的逻辑判断代码可以使用卫语句、策略模式、状态模式等来实现,其中卫语句
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时真的智能,哈哈)
推荐的时错误代码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
上一篇: 小米civi和红米k40哪个好?小米civi和红米k40手机对比
下一篇: 不是新手那你抖什么
推荐阅读
-
sai魔棒选择工具怎么选区细小的细节? sai魔棒工具的使用方法
-
基于python if 判断选择结构的实例详解
-
sai魔棒选择工具怎么选区细小的细节? sai魔棒工具的使用方法
-
运算符的基本概念以及常用Scanner、随机数Random、选择结构的初步了解
-
C语言开发函数库时对外接口隐藏库内结构体实现细节的方法
-
你不知道的细节 剪刀脚结构键盘详解
-
类与结构的选择
-
C语言程序设计——选择分支结构程序设计——判断从键盘输入的整数的正负性和奇偶性(习题4.3)
-
Java Part1 Day4运算符 逻辑 三目运算 程序的三大结构 选择结构
-
Java选择结构:switch结构,eclipse中代码的format