03-流程控制(Java基础)

感谢你的路过,希望学生的笔记能给你一点微不足道的参考(3/100)
Java基础思维导图,完整Java体系的链接
在这里插入图片描述

一,API

1.1什么是API,我们要学到什么程度?

    应用程序编程接口,我们只要会用即可。

1.2API使用步骤是什么?

    1. 打开帮助文档
    2. 点击显示,找到索引,看到输入框
    3. 你要找谁?在输入框里输入,然后回车
    4.看包。java.lang下的类不需要导包,其他需要
    5. 看类的解释和说明
    6. 学习构造方法
    7. 使用成员方法

二,Scanner类

2.1引用类型使用步骤是什么?

1,导包
	导包怎么使用?
		使用import关键字导包,在类的所有代码之前导包,
		引入要使用的类型,java.lang包下的所有类无需导入。
	导包的格式是什么?
		import 包名.类名;
		举例:java.util.Scanner;
2,创建对象
	格式?
		数据类型 变量名 = new 数据类型(参数列表);
		举例:
		Scanner sc = new Scanner(System.in);
	什么是创建对象?
		使用该类的构造方法,创建一个该类的对象。
3,调用方法
	什么是调用方法?
		调用该类的成员方法,完成指定功能
	格式?
		变量名.方法名();
		举例:int i = sc.nextInt(); // 接收一个键盘录入的整数

2.2什么是Scanner类?

    一个可以解析基本类型和字符串的简单文本扫描器
        例如,用户从 System.in 中读取一个数:
            Scanner sc = new Scanner(System.in);
            int i = sc.nextInt();
            //System.in 系统输入指的是通过键盘录入数据。

2.3Scanner用法大全?

```php
package Scanner;

// 第一步,导包
import java.util.Scanner;

/**
 * 什么是Scanner类?
 * 一个可以解析基本类型和字符串的简单文本扫描器
	例如,用户从 System.in 中读取一个数:
	Scanner sc = new Scanner(System.in); 
	int i = sc.nextInt();
	//System.in 系统输入指的是通过键盘录入数据。
 * 引用类型使用步骤是什么?
	1,导包
		导包怎么使用?
			使用import关键字导包,在类的所有代码之前导包,
			引入要使用的类型,java.lang包下的所有类无需导入。
		导包的格式是什么?
			import 包名.类名;
			举例:java.util.Scanner;
	2,创建对象
		格式?
			数据类型 变量名 = new 数据类型(参数列表);
			举例:
			Scanner input = new Scanner(System.in);
		什么是创建对象?
			使用该类的构造方法,创建一个该类的对象。
	3,调用方法
		什么是调用方法?
			调用该类的成员方法,完成指定功能
		格式?
			变量名.方法名();
			举例:int i = input.nextInt(); // 接收一个键盘录入的整数
			举例: String str = input.next(); // 接收键盘录入的字符(串)
	Scanner用法大全?
		参考链接:https://blog.csdn.net/RiceVan/article/details/100109601
 */
public class Demo01_JieShao {

	/**
	 * Scanner类讲解
	 * @param args
	 */
	public static void main(String[] args) {
		demo03();
	}	
	 
	
	/**
	 * next()与nextLine()方法详解
	 * 1.都是吸取输入控制台输入的字符
	 * 2.next()方法不会吸取字符前和后的空格/Tab,只吸取字符,
	 * 开始吸取字符(字符前后不算)直到遇到空格/Tab/回车截取吸取
	 * 3.nextLine() 吸取字符前后的空格/Tab键
	 * 4.next()与nextLine(),遇到回车都截取吸取
	 */
	 public static void demo01() {
		// 第二步,创建对象
		Scanner input = new Scanner(System.in);
		// 提示信息
		System.out.println("请输入数据:");
		
	
		// 第三步,使用方法
		/* 从控制台输入:abcd abcd abcd
		 * 输出的结果是:abcd
 						 abcd abcd
		 * 因为next方法遇到了空格停止接收,所以只输出了abcd,
		 * nextLine方法开始从空格处开始接收直到遇到了第一个回车那么结束接收,
		 * 说明nextLine方法可以接收空格,next方法遇到空格等会停止接收
		 * ----------------------------------------------
		 * String str = input.next(); 
		 * System.out.println(str); 
		 * String str2 =input.nextLine(); 
		 * System.out.println(str2);
		 */
		 
		/* 先输入Tab键,然后输入abcd
		 * nextLine输出的abcd在中间,说明nextLine方法可以接收Tab键
		 * next输出的abcd在开头,说明next方法没有接收Tab键
		 ------------------------------------------------
		 String str = input.nextLine();
	     System.out.println(str);*/
	 }
	
	/**
	 * 练习:键盘输入两个int数字,并且求出和值。
		思路:
		1. 既然需要键盘输入,那么就用Scanner
		2. Scanner的三个步骤:导包、创建、使用
		3. 需要的是两个数字,所以要调用两次nextInt方法
		4. 得到了两个数字,就需要加在一起。
		5. 将结果打印输出。
	 */
	 public static void demo02() {
		 
		 Scanner sc = new Scanner(System.in);
		 
	     int num = sc.nextInt();
	     System.out.println("输入的int数字是:" + num);
	     int um = sc.nextInt();
	     System.out.println("输入的int数字是:" + um);

	     int c=num+um;
	     System.out.println("输入的和为:" + c);
	 }
	 
	 /**
	  * 练习:键盘输入三个int数字,然后求出其中的最大值。
			思路:
			1. 既然是键盘输入,肯定需要用到Scanner
			2. Scanner三个步骤:导包、创建、使用nextInt()方法
			3. 既然是三个数字,那么调用三次nextInt()方法,得到三个int变量
			4. 无法同时判断三个数字谁最大,应该转换成为两个步骤:
			    4.1 首先判断前两个当中谁最大,拿到前两个的最大值
			    4.2 拿着前两个中的最大值,再和第三个数字比较,得到三个数字当中的最大值
			5. 打印最终结果
	  */
	 public static void demo03() {
		  	Scanner sc = new Scanner(System.in);

	        System.out.println("请输入第一个数字" );
	        int num = sc.nextInt();
	        System.out.println("请输入第二个数字" );
	        int um = sc.nextInt();
	        System.out.println("请输入第三个数字" );
	        int m = sc.nextInt();

	        // 首先得到前两个数字当中的最大值
	        int ma = num > um ? num : um;
	        int max = ma > m ? ma : m;
	        System.out.println("最大值是" +max );
	 }
	 
}

三,执行结构概述

   概述
      任何简单或复杂的算法都可以由顺序结构、分支结构和循环结构这三种基本 结构组合而成。 它们的共同点是都包含一个入口和一个出口,它们的每个代码都有机会被执行,不会出现死循环。
      顺序结构
         顺序结构是一种基本的控制结构,它按照语句出现的顺序执行操作
      分支结构
         分支结构又被称为选择结构,根据条件成立与否来执行操作,
      循环结构
         循环结构是种重复结构,如果条件成立,它会重复执行某一循环体,直到出现不满足的条件为止。

3.1,分支结构

3.1.1if
   格式:
      if(关系表达式){ 语句体; }
   流程
      首先判断关系表达式
      看其结果是true还是false 如果是true就执行语句体 如果是false就不执行语句体
   图解
在这里插入图片描述
3.1.2-if…else
   格式:
       if(关系表达式) {
       语句体1;
       }else {
       语句体2;
        }
   流程:
       首先判断关系表达式看其结果是true还是false
       如果是true就执行语句体1
       如果是false就执行语句体2
   图解:
在这里插入图片描述
3.1.3if…else if…else
   格式:
      if (判断条件1) {
      执行语句1;
      } else if (判断条件2) {
      执行语句2;
       }… }else if (判断条件n) {
      执行语句n;
       } else {
      执行语句n+1;
      }
   流程:
      首先判断关系表达式1看其结果是true还是false
      如果是true就执行语句体1
      如果是false就继续判断关系表达式2看其结果是true还是false
      如果是true就执行语句体2 如果是false就继续判断关系表达式
      …看其结果是true还是false …如果没有任何关系表达式为true,就执行语句体n+1
   图解:
在这里插入图片描述
代码:

package FenZhiJieGou;

import java.util.Scanner;

public class Demo02_if {

	
	/**
	 * 分支结构-if相关内容
	 * @param args
	 */
	public static void main(String[] args) {
		demo04();
	}
	
	
	 // 单if语句
	 public static void demo01() {
		  System.out.println("今天天气不错,正在压马路……突然发现一个快乐的地方:网吧");
	        int age = 19;
	        if (age >= 18) {
	            System.out.println("进入网吧,开始high!");
	            System.out.println("遇到了一群猪队友,开始骂街。");
	            System.out.println("感觉不爽,结账走人。");
	        }
	        System.out.println("回家吃饭");
	 }
	
	 // 标准的if-else语句
	 public static void demo02() {
		 int num = 666;
	        if (num % 2 == 0) { // 如果除以2能够余数为0,说明是偶数
	            System.out.println("偶数");
	        } else {
	            System.out.println("奇数");
	        }
	 }
	
	 // if..else if...else
	 public static void demo03() {
		 int x = -10;
	        int y;
	        if (x >= 3) {
	            y = 2 * x + 1;
	        } else if (-1 < x && x < 3) {
	            y = 2 * x;
	        } else {
	            y = 2 * x - 1;
	        }
	        System.out.println("结果是:" + y);
	 }
	 
	 // 课上例子成绩分布,多重if..else语句
	 public static void demo04() {
		 
		Scanner input = new Scanner(System.in);
		System.out.println("请输入成绩:");
		 
		int score = input.nextInt();
		
		 if (score >= 90 && score <= 100) {
	            System.out.println("优秀");
	        } else if (score >= 80 && score < 90) {
	            System.out.println("好");
	        } else if (score >= 70 && score < 80) {
	            System.out.println("良");
	        } else if (score >= 60 && score < 70) {
	            System.out.println("及格");
	        } else if (score >= 0 && score < 60) {
	            System.out.println("不及格");
	        } else { // 单独处理边界之外的不合理情况
	            System.out.println("数据错误");
	        }
	 }
}

3.1.4Switch
   格式:
       switch(表达式) {
       case 常量值1: 语句体1; break;
       case 常量值2: 语句体2; break;
       … default: 语句体n+1;break;
      }
   switch 语句有关规则:
       表达式的返回值必须是下述几种类型之一:int, byte, char, short,String;
       case 子句中的取值必须是常量,且所有 case 子句中的取值应是不同的;
       default 子句是可选的; break 语句用来在执行完一个 case 分支后使程序跳出 switch 语句块;如果 case 后面没有写 break 则直接往下面执行!Case 后面的执行体可写{ }也可以不写{ }.
   流程:
       首先计算出表达式的值
       其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
       最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
   图解:
在这里插入图片描述
   case的穿透性:
       在switch语句中,如果case的后面不写break,将出现穿透现象,也就是不会在判断下一个case的值,直接向后运 行,直到遇到break,或者整体switch结束。由于case存在穿透性,因此初学者在编写switch语句时,必须要写上break。
代码:

package FenZhiJieGou;

import java.util.Scanner;

public class Demo03_Switch {

	/**
	 * 分支结构-Switch相关内容
	 * @param args
	 */
	public static void main(String[] args) {
		demo01();
	}
	
	// 例题
	public static void demo01() {
		Scanner input = new Scanner(System.in); 
		System.out.println("请输入月份:"); 
		int month = input.nextInt(); 
		
		// 输出月份天数
		switch(month){ 	// 利用case的穿透性,简化代码
			case 1: 
			case 3: 
			case 5: 
			case 7: 
			case 8: 
			case 10: 
			case 12: System.out.println(month + "月共有 31 天"); break; 
			case 4: 
			case 6: 
			case 9: 
			case 11: System.out.println(month + "月共有 30 天"); break;
			case 2: System.out.println(month + "月共有 28 天"); break;
			default : System.out.println("友情提示,您输入有误!"); break;
		}
	}
}

3.2,循环结构

   循环语句功能 ,在循环条件满足的情况下,反复执行特定代码
3.2.1while
   格式:
      初始化表达式① while(布尔表达式②){
      循环体③ 步进表达式④
      }
   流程:
      执行顺序:
         ①②③④>②③④>②③④…②不满足为止。
         ①负责完成循环变量初始化。
         ②负责判断是否满足循环条件,不满足则跳出循环。 ③具体执行的语句。
         ④循环后,循环变量的变化情况。
   图解:
在这里插入图片描述3.2.2do…while
   格式:
      初始化表达式①
       do{
      循环体③
      步进表达式④
       }while(布尔表达式②);
   流程:
      执行顺序:
         ①③④>②③④>②③④…②不满足为止。
         ①负责完成循环变量初始化。
         ②负责判断是否满足循环条件,不满足则跳出循环。 ③具体执行的语句
         ④循环后,循环变量的变化情况
   图解:
在这里插入图片描述   特点:
      无条件执行一次循环体,即使我们将循环条件直接写成false,也依然会循环一次。这样的 循环具有一定的风险性,因此初学者不建议使用do…while循环。
   while 循环和 dowhile 循环的区别?
      while:先判断条件,如果条件满足,再执行循环操作
      do while:先执行一遍循环操作,然后再判读条件,如果条件满足,继续执行循环操作。
代码:

package XunHuanJieGou;
import java.util.Scanner;

public class Demo05_While {

	/**
	 * 循环结构-While相关内容
	 * @param args
	 */
	public static void main(String[] args) {
		demo02();
	}
	
	// while例题
	public static void demo01() {
		Scanner input = new Scanner(System.in);
		System.out.println("请输入班级总人数:");
		// 使用变量studentNum记录班级总人数
		int studentNum = input.nextInt();
		// 用于记录循环的次数,以及控制循环何时结束
		int i = 0;
		// 定义变量sum,用于统计总分数
		int sum = 0;
		while(i < studentNum) {
			i++;
			System.out.println("请输出第"+i+"个学生的成绩:");
			int s = input.nextInt();
			sum +=s;	
		}
		System.out.println("学生的平均成绩为:"+sum/studentNum);
	}
	
	//  do...while与while的比较
	public static void demo02() {
		int i = 5;
		/*
		 * do { i++; System.out.println(i); }while(i<5);
		 */
		
		while(i<5) {
			i++;
			System.out.println(i);
		}
		System.out.println("程序结束");
	}

}

3.2.3for
   格式:
      for(初始化表达式①; 布尔表达式②; 步进表达式④){ 循环体③
       }
   流程:
      执行顺序:
         ①②③④>②③④>②③④…②不满足为止。
         ①负责完成循环变量初始化
         ②负责判断是否满足循环条件,不满足则跳出循环 ③具体执行的语句
         ④循环后,循环条件所涉及变量的变化情况
   图解:
在这里插入图片描述
代码:

package XunHuanJieGou;

public class Demo04_For {

	/**
	 * 循环结构-For相关内容,嵌套循环
	 * @param args
	 */
	public static void main(String[] args) {
		demo02();
	}
	
	// For例题:1加到100的和
	public static void demo01() {
		int result = 0; 
		
		for(int i=1; i<=100; i++) { 
			result += i; 
			}
		System.out.println("result=" + result);	
	}
	
	// 嵌套循环
	public static void demo02() {
		
		// 打印时间
		/*
		 * for (int hour = 0; hour < 24; hour++) { // 外层控制小时 for (int minute = 0; minute
		 * < 60; minute++) { // 内层控制小时之内的分钟 System.out.println(hour + "点" + minute +
		 * "分"); } }
		 */
		
		for(int i=0;i<10;i++) {//外层控制行数
			for(int j=0;j<10;j++) {//内层控制列数
				System.out.print("* ");	
			}
			System.out.println();	
		}
	}
}

3.2.4嵌套循环
   定义:
      指一个循环的循环体是另一个循环。比如for循环里面还有一个for循环,就是嵌套循环。总共的循环次数=外循环次数*内循环次数
   格式:
      for(初始化表达式①; 循环条件②; 步进表达式⑦) {
      for(初始化表达式③; 循环条件④; 步进表达式⑥) {
      执行语句⑤;
      }
      }
   流程:
      执行顺序:①②③④⑤⑥>④⑤⑥>⑦②③④⑤⑥>④⑤⑥ 外循环一次,内循环多次。比如跳绳:一共跳5组,每组跳10个。5组就是外循环,10个就是内循环。
3.2.5补充
(1)循环语句的区别
控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了,而while循环结束还可以继 续使用,如果你想继续使用,就用while,否则推荐使用for。原因是for循环结束,该变量就从内存中消 失,能够提高内存的使用效率。在已知循环次数的时候使用推荐使用for,循环次数未知的时推荐使用while。
(2)跳出语句
break:跳出循环
使用场景:终止switch或者循环在选择结构switch语句中 在循环语句中 离开使用场景的存在是没有意义的。
continue:跳出本次循环,进行下一次循环
使用场景:结束本次循环,继续下一次的循环
(3)如何退出多重循环?
看代码:给多重循环起别名,内层循环,break:别名;

package XunHuanJieGou;

public class demo06_TiaoChuXunHuan {
	
	
	/**
	 * break与continue语句
	 * 		break是用于终止本轮所有次循环。即不执行本次循环中break后面的语句,直接跳出循环。
	 * 		continue是用于终止本轮本次循环。即本次循环中continue后面的代码不执行,进行下一次循环的入口判断。
	 * @param args
	 */
	public static void main(String[] args) {
		demo02();
	}
	
	// Break
	public static void demo01() {
		for (int i = 1; i <= 10; i++) {
	    // 如果希望从第4次开始,后续全都不要了,就要打断循环
			if (i == 4) { // 如果当前是第4次
				break; // 那么就打断整个循环
	         }
	         System.out.println("Hello" + i);
	    }
	}
	
	// Continue
	public static void demo02() {
		for (int i = 1; i <= 10; i++) {
            if (i == 4) { // 如果当前是第4层
                continue; // 那么跳过当前次循环,马上开始下一次(第5层)
            }
            System.out.println("Hello" + i );
        }
	}
	
	// 退出多重循环
	public static void demo03() {
		haha:for(int i=0;i<10;i++) {
			for(int j=0;j<10;j++) {
				System.out.print("*i="+i+",j="+j);	
				if(i==5 && j==5) {
					break haha;
				}
			}
		}
	}
}

循环语句练习(图形打印):

package XunHuanJieGou;

import java.util.Scanner;

public class Demo07_TuXingdaYin {

	/**
	 * 图形打印
	 * @param args
	 */
	public static void main(String[] args) {
		demo02();
	}
	

	
	
	/**
	 图形
	 *
	 ***
	 *****
	 ******* 
	 解决方案:
	 	外层循环控制行数:4
	 	内层循环控制列数:第一行循环1次,2-3,3-5,4-7
	 */
	public static void demo01() {
		for(int i=0;i<4;i++) {
			// i: 0 1 2 3
			for(int j=0;j<i*2+1;j++) {
				System.out.print("*");
			}
			System.out.println();
		}	
	}
	
	
	/**
	 图形
	    *
	   ***
	  *****
	 ******* 
	 解决方案:
	 	外层循环控制行数:4
	 	内层循环1,控制空格列数:第一行三个空格,第二行2空格,第三行1个空格,第四行0空格
	 	内层循环2,控制*号列数:第一行时循环一次,第二行时循环3次,第三行循环五次,第四行循环7次
	 */
	public static void demo02() {
		 Scanner sc = new Scanner(System.in);
	        int n = sc.nextInt();
	        for(int i = 1; i<=n; i++){
	            //输出n-i个空格
	            for(int j = 1; j<=n-i; j++){
	                System.out.print(" ");
	            }
	            //输出2*i-1个星
	            for(int j = 1; j<=2*i-1; j++){
	                System.out.print("*");
	            }
	            //换行
	            System.out.println();
	        }
	}
	
	
	/**
	 图形
	    *
	   ***
	  *****
	 ******* 
	  *****
	   ***
	 ---*
	 解决方案:
	 菱形的上半部分:
	 	外层循环控制行数:X
	 	内层循环1,控制空格列数:第一行X-1个空格,第二行X-2空格,......第n行x-n空格
	 	内层循环2,控制*号列数:第n行时循环2*n-1个*
	 下半部分:
	 	外层循环控制行数:X-1
	 	内层循环1,控制空格列数:第n行时n空格
	 	内层循环2,控制*号列数:第n行时循环2*(x-n)-1个*
	 	
	 */
	public static void demo03() {
		 Scanner sc = new Scanner(System.in);
	     int n = sc.nextInt();
	        
	        //零形的上半部分
	        for(int i = 1; i<=n; i++){
	            //输出n-i个空格
	            for(int j = 1; j<=n-i; j++){
	                System.out.print(" ");
	            }
	            //输出2*i-1个星
	            for(int j = 1; j<=2*i-1; j++){
	                System.out.print("*");
	            }
	            //换行
	            System.out.println();
	        }
	        
	        //零形的下半部分
	        for(int i = 1; i<=n-1; i++){
	            //输出n个空格
	            for(int j = 1; j<=i; j++){
	                System.out.print(" ");
	            }
	            //输出2*(x-n)-1个星
	            for(int j = 1; j<=2*(n-i)-1; j++){
	                System.out.print("*");
	            }
	            //换行
	            System.out.println();
	        }
	            
	}

}

四,综合练习

需求1:判断用户输入类型

public class Demo08_PanDuanShuRuLeiXing {

	/**
	 * 判断用户输入类型
	 * @param args
	 */
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("请输入数字:");
		
		// 在接收输入之前判断输入的类型是否为int
		if(input.hasNextInt()) {
			int num = input.nextInt();
		    System.out.println("输入的int数字是:" + num);
		}else {
			System.out.println("输入错误,请重新输入");
		}
	}	
}

需求2:出租车计费任务(忘记需求了)

package RenWu;

import java.util.Scanner;

import javax.security.sasl.SaslServer;

// 拉下的进度有点多,直接跟着视频走一遍。看情况可能画个流程图
public class Task01_ChuZuCheJiFei {

	/**
	 * 出租车计费任务
	 * @param args
	 */
	public static void main(String[] args) {
		// 键盘输入对象
		Scanner input = new Scanner(System.in);
		
		// 定义变量
		double sum = 0;// 总费用
		double perPrice = 2.3;// 基本单价
		double mileMoney = 0;//里层费用
		double lowSpeedMoney = 0;//低速行驶费用
		double orderMoney = 0;//预约叫车费用
		double emptyMoney = 0;//空驶费用
		double nightMoney = 0;//夜间行驶费用
		double oilMoney = 1;//燃油附件费用
		
		//---里程费用
		System.out.print("请输入总里程数");
		double mile = input.nextDouble();
		if (mile > 3) {
			mileMoney = 13+(mile-3)*perPrice;
		}else {
			mileMoney=13;
		}
		
		//---低速行驶费用
		System.out.println("是否有低速行驶(true/false)?");
		boolean lowSpeedFlag = input.nextBoolean();
		if(lowSpeedFlag) {
			System.out.println("请输入低速行驶时间: ");
			int minute = input.nextInt();
			System.out.println("是否是在早晚高峰(true/false)?");
			boolean rushFlag = input.nextBoolean();
			if(rushFlag) {
				lowSpeedMoney = minute/5*perPrice*2;
			}else {
				lowSpeedMoney = minute/5*perPrice*1;
			}
		}
		
		//---预约叫车
		System.out.println("是否预约叫车(true/false)?");
		boolean orderFlag = input.nextBoolean();
		if(orderFlag) {
			System.out.println("请输入预约小时数:");
			int hour = input.nextInt();
			if(hour > 4) {
				orderMoney = 6;
			}else {
				orderMoney = 5;
			}
			
		}
		
		//---空驶费用
		if(mile > 15) {
			System.out.println("请输入是否往返在两公里范围内(true/false)?");
			boolean roundFlag = input.nextBoolean();
			if(!roundFlag) {
				emptyMoney = (mile-15)*perPrice*1.5;
			}
		}
		
		//---夜间费用
		System.out.println("请输入是否夜间行驶(true/false)?");
		boolean nightFlag = input.nextBoolean();
		if(nightFlag) {
			nightMoney = (mile-3)*perPrice*0.2;
		}
		
		
		// 计算总费用
		sum = mileMoney+lowSpeedMoney+orderMoney+emptyMoney+nightMoney+oilMoney;
		System.out.println("此次行程的总费用"+Math.round(sum));
		System.out.println("里程费用"+mileMoney);
		System.out.println("低速行驶费用"+lowSpeedMoney);
		System.out.println("空驶费用"+emptyMoney);
		System.out.println("夜间行驶费用"+nightMoney);
		System.out.println("燃油附件费用"+oilMoney);
	}
}

需求3:流程控制的逻辑训练任务

   1,计算应缴金额 商场根据会员积分打折:
   2,计算该年该月天数
   3,图形打印:
   4,打印九九乘法表
   5,打印水仙花数

package RenWu;

import java.util.Scanner;

public class Task02_LiuChengKongZhi {

	
	/**
	 * 流程控制的逻辑训练任务
	 * @param args
	 */
	public static void main(String[] args) {
		demo05();
	}
	
	/**
	 	计算应缴金额 商场根据会员积分打折:
		2000 分以内打 9 折, 4000 分以内打 8 折, 8000 分以内打 7.5 折, 8000 分以上打 7 折, 
		使用 if-else-if 结构,实现手动输入购物金额和积 分,计算出应缴金额
	 */
	public static void demo01() {
		Scanner input = new Scanner(System.in);
		System.out.println("请输入积分:");
		int score = input.nextInt(); 
		System.out.println("请输入购物金额:");
		double money = input.nextDouble();
		
		 if (score <= 2000 ) {
			 money = money*0.9;
	        } else if (score >= 2000 && score < 4000) {
	        	money = money*0.8;
	        } else if (score >= 4000 && score < 8000) {
	        	money = money*0.75;
	        }
	        else { 
	        	money = money*0.7;
	        }
		
		
		System.out.println("应缴金额:"+money);
	}
	
	
	/**
	 * 计算该年该月天数
	 * 解决思路:
	 * 	1,输入拷贝demo01,把接收类型换为int.
	 * 	2,switch部分的例题拷贝到下面改一下输出,在加上闰年判断。
	 */
	public static void demo02() {
		 	Scanner input = new Scanner(System.in);   //输入
	        System.out.println("请输入年份:");
	        int year = input.nextInt();             //接收控制台输入的年份
	        System.out.println("请输入月份:");
	        int month = input.nextInt();            //接收控制台输入的月份
	        switch (month){
	            //1,3,5,7,8,10,12都是31天
	            case 1:
	            case 3:
	            case 5:
	            case 7:
	            case 8:
	            case 10:
	            case 12:
	                System.out.println(year+"年"+month+"月有31天");break;
	            //4,6,9,11都是30天
	            case 4:
	            case 6:
	            case 9:
	            case 11:
	                System.out.println(year+"年"+month+"月有30天");break;
	            case 2:
	                //判断闰年
	                if(year%4==0&&year%100!=0||year%400==0){
	                    System.out.println(year+"年2月有29天");
	                }else {
	                    System.out.println(year+"年2月有28天");
	                }
	                break;
	        }
	}
	
	/**
	 * 图形打印:
	 * 解决思路:
	 * 1,第一,二个简单属于白给类型。第三个跟前面讲过的图形详解例题一毛一样,不做。
	 */
	public static void demo03() {
		Scanner sc = new Scanner(System.in);
	    int n = sc.nextInt();
		
	    // 第一个图形
	    for(int i=1;i<=n;i++) {
			for(int j=1;j<=i;j++) {
				System.out.print("*");
			}
			System.out.println();
		}	
	    
	    
	    // 第二个图形
	    for(int i=1;i<=n;i++) {// 因初始值设为1,故内循环条件+1
			for(int j=1;j<=n-i+1;j++) {
				System.out.print("*");
			}
			System.out.println();
		}	
		
	}
	
	
	/**
	 * 打印九九乘法表
	 */
	public static void demo04() {
		System.out.println("九九乘法表");
		 for(int i=1;i<=9;i++) {
				for(int j=1;j<=i;j++) {
					System.out.print(j+"*"+i+"="+i*j+"\t");
				}
				System.out.println();
			}	
	}
	
	
	/**
	 * 打印水仙花数
	 */
	public static void demo05() {
		 //声明是三个 变量,用来存放三位数的三个位子上的值
	    int ge,shi,bai;
	    //循环取得所有的三位数
	    for (int i = 100; i < 1000; i++) {
	        //先取出个位数,任何三位数模10都会是个位数
	        ge=i%10;
	        //取出十位数,三位数除以10得到一个两位数,再模10,取到十位数
	        shi=(i/10)%10;
	        //取出百位数,任何三位数直接除以100遍可取到百位数
	        bai=i/100;
	        //判断i是否是水仙花数,如果是则输出结果,不是则退出
	        if(i==ge*ge*ge+shi*shi*shi+bai*bai*bai){
	            //使用print输出不换行,\t在数字之间添加一个制表符
	            System.out.print(i+"\t");
	        }
	    }	
	}
}

参考:距离记笔记的时候过了一段时间,如果我的笔记有明显借鉴了您的内容,请见谅。(我记忆力很差的,当初写笔记的时候,参考文档记录的可能不全)
Scanner用法参考链接:https://blog.csdn.net/RiceVan/article/details/100109601
图形打印参考链接:https://blog.csdn.net/cui_yonghua/article/details/90581140
资料下载链接(笔记+代码+其他):百度网盘
链接:https://pan.baidu.com/s/1hhkEU7CiXeYZPgqddO4b6w
提取码:1111
感谢阅读,祝你从此一帆风顺。


版权声明:本文为weixin_42688085原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。