JavaSE语言基础之流程控制语句

一.分支语句

  1. if语句

if 、if-else、if-else-if:可以处理一切分支判断。
格式:1)  if(判断条件){

                执行操作; //当判断条件为true时 才执行

             }

         2)  if(判断条件)){

               执行操作;

             }else{

              方法体;

            }

         3)  if(判断条件)){

               执行操作;

             }else if(判断条件2)){

                 执行操作;

             }else{

               ...

            }

// 判断一个数是否为奇数
         
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入一个非0数字");
            int num = scanner.nextInt();
            if (num % 2 == 1) {
                System.out.println("您输入的数是奇数");
            }
            else  {
                System.out.println("您输入的数是偶数");
            } 
        //判断字符串的方式
        // 使用equals()方法判断字符串是否相等 不可用 ==
        // !str.equals()
           String str = "张三";
           if (str.equals("张三")) {
           System.out.println("恭喜你说对了");
          } else {
              System.out.println("说错了");
          }   
View Code
        /* 需求
         * 用户输入一个年份 判断该年是否是闰年
         * 闰年判断: 可以被4整除但不能被100整除 可以被400整除
         * 若为闰年则输出该年为闰年  否则输出 平年
         */

        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入一个年份");

        int years = scanner.nextInt();

        if (years % 4 == 0 && years % 100 != 0 || years % 400 == 0) {

            System.out.println(years + "年是闰年");

        } else {

            System.out.println(years + "年是平年");
        }

 注意:  逻辑判断 无论逻辑又多么复杂 结果只有两只情况 true/false

2. switch语句

  格式: switch(常量){

                case 常量1:

                   执行操作;

                      break;

                case 常量2:

                   执行操作;

                    break;
                   ….

          }

import java.util.Scanner;

public class Test2 {
    public static void main(String[] args) {
        //输入年份和月份,输出该月的天数 (使用switch case语句)
        //再输入日期 判断该日期是该年的第多少天?
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入年份");
        int year = scanner.nextInt();
        System.out.println("请输入月份");
        int month = scanner.nextInt();
        System.out.println("请输入日期");
        int day = scanner.nextInt();
        boolean isLeapYear = year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
        int days = 0;

 switch (month) {
                    case 12:
                        days += 30;
                    case 11:
                        days += 31;
                    case 10:
                        days += 30;
                    case 9:
                        days += 31;
                    case 8:
                        days += 31;
                    case 7:
                        days += 30;
                    case 6:
                        days += 31;
                    case 5:
                        days += 30;
                    case 4:
                        days += 31;
                    case 3:
                        int day1 = isLeapYear ? 29 : 28;
                        days += day1;
                    case 2:
                        days += 31;

                    case 1:
                        days += day;
                        System.out.println(year + "年" + month + "月" + day + "日是该年的第" + days + "天");
                        break;
                    default:
                        System.out.println("您输入的月份有错误,请重新输入");
                        break;
                }
View Code


    注意事项:

   break 代表跳出关键字 只要遇见了break 就会停止执行该代码块(switch{})
   switch case 语句限制条件:
              只能判断 byte short int  字符串 字符 包装类 枚举类
              不能判断 boolean型  long型
              不能对某一范围进行判断 必须是具体的内容
    swtich-case:若case中无符合的数,并且default写在最前(无break时),则为顺序执行,有break或 } 则退出。
    swtich-case:若case中无符合的数,并且default写在最后,则执行default。
    swtich-case:若case中有符合的数,并且default写在最后,并且default前面的case没有break时,default也会执行。

二. 循环控制语句
①for:最常用,用在与次数有关的循环处理,甚至只用for可以解决任何循环问题。
    注意事项:for中定义的用于控制次数的循环变量,只在for中有效,for结束则循环变量被释放(回收)。
        语法:
          1. for(循环变量初始化;循环条件;自增/自减){
                   代码块;
            }
         2. 循环嵌套
          or(循环变量初始化;循环条件;自增/自减){
                    执行语句1;
                     for(循环变量初始化;循环条件;自增/自减){
                          执行语句2;
                    }
         }

/**
 *1. 有1,2,3,4四个数字,问这4个数字能组成多少个互不相同且无数字重复的三位数?都是多少?
 * 2.一个数如果恰好等于它的因子之和,这个数就成为”完数”.例如 6 = 1 + 2 + 3,找出1000以内的所有完数.
 */
1.
public class HW1 {
    public static void main(String[] args) {
        int c = 0 ;
        for (int i = 1; i < 5; i++) {
            for (int i1 = 1; i1 < 5; i1++) {
                for (int i2 = 1; i2 < 5; i2++) {
                    if ( i2 != i1 && i2 != i && i1 != i){
                        System.out.println("这样的三位数有: " + i + i1 + i2);
                        c ++ ;
                    }
                }
            }
        }
        System.out.println("共有 " + c + " 个这样的数”);
2.
        for (int i = 1; i < 1000; i++) {
            int sum = 0;
            for (int i1 = 1; i1 < i; i1++) {
                if (i%i1==0){
                    sum  += i1;
                }
            }
            if (sum==i){
                System.out.println("完数有:" + i);
            }
        }
    }
}


②while:很常用,用在循环时候要先检查循环条件再处理循环体,用在与次数无关的情况。如果不能明确结束条件的时候,先使用while(true),在适当条件使用if语句加break结束循环。

   while(条件){
              执行代码
       }
*当条件为true时执行{}里面的内容
*当条件为false时 跳出循环
* 注意:
      必须要有 条件为false的情况 否则就是死循环
      死循环可用 break 跳出循环

// 斐波那切数列
public class HW3 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入需要几个斐波那契数");
        int n = scanner.nextInt();
        long prev = 1;
        long next = 1;
        long accumulate = 0;
        int i=0;
        System.out.print(prev + " ");
        System.out.print(next + " ");
        while (i<n-2) {
            accumulate = prev + next;
            prev = next;
            next = accumulate;
            System.out.print(accumulate + " ");
            i++;
        }
    }
}


③do-while:在循环最后判断是否结束的循环。如:使用while(true) 实现循环的时候,结束条件break在while循环体的最后,就可以使用 do-while 。do-while 的结束条件经常是“否定逻辑条件”,不便于思考业务逻辑,使用的时候需要注意。可以利用while(true)+ break 替换。

  * do while循环
      语法:
         do{
             代码块
        }while(条件);
 while 先执行判断条件 在执行代码块里的内容
 do...while 先执行一次代码块里的内容 在判断条件 无论条件是否满足

//水仙花数
public class HW1 {
    public static void main(String[] args) {
        //找出100~1000之间的水仙花数
        //水仙花数 abc = a^3 + b^3 + c^3
        int num = 100;
        while (num < 1000) {
            int a = num/100;
            int b = num%100/10;
            int c = num%10;
            if (num == (a * a * a + b * b * b + c * c * c)) {
                System.out.println(num + " 是水仙花数");
            }
            num++;
        }
    }
}


④循环三要素:A.循环变量初值  B.循环条件  C.循环变量增量(是循环趋于结束的表达式)
⑤for和while循环体中仅一条语句,也要补全{ },当有多条语句,且不写{ }时,它们只执行紧跟着的第一条语句。
⑥循环的替换:
 while(布尔表达式){} 等价 for(;布尔表达式;){}
 while(true){}  等价  for(;;)
 while(true){} + break 替换 do{}while(布尔表达式);
 for(;;) + break 替换 do{}while(布尔表达式);

三.跳转控制语句
continue:退出本次循环,直接执行下一次循环    
break:退出所有循环

原文地址:https://www.cnblogs.com/luke-liuqi/p/9305234.html