结构化编程,if和switch语句

今天学习了结构化编程的基本知识,学习和了解了Java语法语句,包括switch,if等

结构化编程

结构化程式设计Structured programming是1960年代开始发展起来的一种编程典范。它采用子程序、程式码区块、for循环以及while循环等结构来取代传统的goto。希望借此来改善计算机程序的明晰性、品质以及开发时间,并且避免写出面条式代码。已经证明,任何复杂的问题都可以三种基本算法结构来描述:顺序、选择、循环。因此用计算机语句描述的程序也包含三种基本结构
设计方法:使用流程图表示算法流程图是流经一个系统的信息流、观点流或部件流的图形代表。在企业中,流程图主要用来说明某一过程。这种过程既可以是生产线上的工艺流程,也可以是完成一项任务必需的管理过程。常见的绘制工具有Visio、PowerDesigner等圆角矩形表示“开始”与“结束”;矩形表示行动方案、普通工作环节用;菱形表示问题判断或判定(审核/审批/评审)环节;用平行四边形表示输入输出;箭头代表工作流方向。
结构化程序设计原则:
自顶向下、逐步求精、模块化
结构化程序设计还有一个重要的规定,那就是只能使用顺序结构、选择结构、循环结构这三种基本结构(或由它们派生出来的结构)来定义程序的流程。

条件分支语句

Java语言提供了两种判断语句:if语句和switch语句。这两种语句用于实现判断,当符合某些条件时执行某段代码,否则将不执行
语法规则1:

if(条件表达式){
    
    
  代码块;  //0条到多条可执行语句,含义是当【条件表达式】返回值为true时执行这里,如果返回false这里不执行。如果代码块中只有一条语句,则{
    
    }可以省略
}

要求用户输入学生性别,如果输入true则显示男,其它不回显

Scanner sc = new Scanner(System.in);
System.out.println("请输入性别:true/false");
boolean bb = sc.nextBoolean();
if (bb) {
    
    //可以写成if(bb==true)
    //如果if(bb==false){}可以简写为if(!bb){}
 System.out.println("您输入的是男");
}
System.out.println("程序执行结束!");

语法规则2:一定会执行其中的一个分支,不可能出现都不执行或者都执行的情况

if(条件表达式){
    
    
  代码块1;  //0条到多条可执行语句,含义是当【条件表达式】返回值为true时执行这里
}else{
    
    
  代码块2; //当条件为true时执行[代码块1],否则执行【代码块2】,不可能出现都执行或者都不
执行的情况
}

要求用户输入学生性别,如果输入true则显示男,其它显示女

Scanner sc = new Scanner(System.in);
System.out.println("请输入性别:true/false");
boolean bb = sc.nextBoolean();
if (bb) {
    
    
 System.out.println("您输入的是男");
}else {
    
    
 System.out.println("您输入的是女");
}
System.out.println("程序执行结束!");

语法3:多个条件多个分支

if(条件表达式1){
    
    
 代码块1;
}else if(条件表达式2){
    
      //允许多次出现
 代码块2;
}else{
    
        //当上面所有条件都不成立时执行
 代码块n;
}

需求:要求输入学生成绩(假设成绩都是整数),如果>85显示优秀,如果>70显示良好,如果>60显示及格,否则显示不及格

System.out.println("请输入学生成绩:");//提示信息
Scanner sc = new Scanner(System.in);//构建Scanner对象
int score = sc.nextInt();//阻塞当前程序的执行,等待用户输入int类型的数据
//首先对用户录入的数据进行合法性验证
if(score>=0 && score<=100) {
    
    
 if (score > 85) {
    
    
 System.out.println("优秀");  //当其中一个语句块执行后则立即跳出if结构,不
会继续执行后续判断
 } else if (score > 70) //如果语句块只有一条语句则{}可以省略
    // 第二个条件实际上是一个复合条件   !(score>85) && score>70
 System.out.println("良好");
 else if (score >= 60)
 System.out.println("及格");
 else  //当所有条件都不成立时执行的语句
 System.out.println("不及格");
}else {
    
    
 System.out.println("输入的成绩不合法!");
}
System.out.println("执行结束");

if/if…else/if…else if…else允许嵌套
需求:要求输入学生成绩(假设成绩都是整数)和学生性别,如果男生>60显示你是个猪?,如果小于60显示你连猪都不如;如果女生>60显示还可以阿,如果小于60显示继续加油啊

public class Test1 {
    
    
 public static void main(String[] args) {
    
    
 int score = 0;// 定义临时变量用户存储学生成绩
 System.out.println("请输入学生成绩");
 Scanner sc = new Scanner(System.in);
 score = sc.nextInt();// 条件中要求学生成绩必须为整数
 // 由于sc.nextInt不能消费掉末尾的回车符,所以下一个nextLine则不能接收到数据
 if (sc.hasNextLine())
 sc.nextLine();
 boolean sex = true;// 用于存储性别
 System.out.println("请输入学生性别");
 String ss = sc.nextLine();// 读取一行数据
 sex = "男".equals(ss);
 // 验证程序的输入逻辑是否正确
 System.out.println("您输入的学生成绩为:" + score + ",性别为:" + sex);
 if (sex) {
    
    
 // 男生 , 如果男生>60显示你是个猪?,如果小于60显示你连猪都不如
 if (score > 60)
 System.out.println("你是个猪?");
 else if (score < 60)
 System.out.println("你连猪都不如");
 //注意:else不是必须的,else的含义是score<=60
 } else {
    
    
 // 女生,>60显示还可以阿,如果小于60显示继续加油啊
 if(score>60)
 System.out.println("还可以阿");
 else if(score<60)
 System.out.println("继续加油啊");
 }
 }
}

标准输出
System.out.println(obj) 参数obj可以是任意类型的数据,实际上其它类型的数据是自动转换为字符串类型进行输出显示
键盘数据录入
Scanner用于实现接收用户的键盘录入数据
Scanner sc = new Scanner(System.in);

int i = sc.nextInt();从键盘上接受一个用户录入的整数
Scanner s = new Scanner(System.in);//构建一个Scanner对象用于接收用户的键盘录入数
据
String ss=s.nextLine();//读取用户输入的一行数据,以回车作为标志
System.out.println("input:"+ss+"1111");
Scanner s = new Scanner(System.in);// 构建一个Scanner对象用于接收用户的键盘录入数int ss = s.nextInt();// 接收用户输入的整数,如果输入数据的格式不正确,则报错中断程序;
如果用户不输入数据则一直等待用户输入
System.out.println("input:" + ss + "~~~~");

开关分支语言

多个分支的等值判断时,使用switch比if使用方便

switch (表达式) {
    
    
 case1:
 操作 1 的语句;            break;
 case2:
 操作 2 的语句;            break;.
 case 值n :
 操作 n 的语句;            break;
 default:
 默认语句;
}
// 威哥的出厂年份
int birth = 1972;
// 获取当前的年份
int year = new Date().getYear() + 1900;// new Date()用于获取当前机器的日期,
getYear用于获取当前日期的年份值
// 10岁以下称黄口,20岁以下称舞象之年,男子20岁称弱冠,30岁称而立之年。40岁称不惑之年。
// 50岁称知命之年。60岁称花甲或耳顺之年。70岁称古稀之年。80岁称杖朝之年
// 80至90岁称耄耄之年。100岁乐期颐
int res = (year - birth) / 10;  //注意这里是整除计算---技巧 18/10=1
switch (res) {
    
    
 case 0:
 System.out.println("黄口");
 //break用于实现跳出switch结构,否则继续向后执行直到break或者switch结构结束
 break;  
 case 1:
 System.out.println("舞象之年");
 break;  
 case 2:
 System.out.println("弱冠");
 break;  
 case 3:
 System.out.println("而立之年");
 break;
     //剩余省略...  
 default:
 System.out.println("乐期颐");
 break; //由于没有后续语句,所以break可以省略
}

重点的语法规则:switch后面的表达式允许的数据类型?
允许byte\short\int,但是不允许long类型
允许字符类型和字串类型[特殊点,要求JDK1.7+],究其本质是比较字符串的hashcode值

String str="12";
switch (str) {
    
    
 case "0":
 System.out.println("黄口");
 //break用于实现跳出switch结构,否则继续向后执行直到break或者
switch结构结束
 break;  
 case "1":
 System.out.println("舞象之年");
 break;  
 case "2":
 System.out.println("弱冠");
 break;  
 case "3":
 System.out.println("而立之年");
 break;  
 default:
 System.out.println("乐期颐");
 break; //由于没有后续语句,所以break可以省略
}

需求:输入学生成绩,如果>=80显示优秀,如果>=60显示及格,否则显示不及格

int score=87;
switch(score){
    
    
    case 100:
    case 99:
   ......
    case 80:
   System.out.println("优秀!");
        break;
    case ....
}

简化代码:

public class Test2 {
    
    
 public static void main(String[] args) {
    
    
 System.out.println("请输入学生成绩:");
 Scanner sc=new Scanner(System.in);
 int score=sc.nextInt();
 if(score>=0 && score<=100) {
    
    
 int level=score/10;
 switch (level) {
    
    
   case 10:
                case 9:
                case 8:
                    System.out.println("优秀");
                    break;
                case 7:
                case 6:
                    System.out.println("及格");
                    break;
                default:
                    System.out.println("不及格");
                    break;
               }
 }else {
    
    
 System.out.println("输入的成绩不合法!");
 }
 }
}

猜你喜欢

转载自blog.csdn.net/Lecheng_/article/details/112128917
今日推荐