本例就流程控制语句的应用方面, 通过三个练习题来深入学习和巩固下学习的流程控制语句方面的知识, 设计到, if 条件判断语句, switch 多分支语句, for 循环语句及其嵌套多层使用, while 循环语句.
练习题
1. 判断奇偶数(if,switch 语句)
2. 打印菱形(for 循环)
3. 计算 1+1/2!+1/3!+1/4!+...+1/20!(使用 while 循环语句)
IDE:IDEA
语言: java
本次实例: 流程控制语句的练习与巩固
源代码
- package day_4_2;
- /**
- * @outhor xiaoshe
- * @date 2019/4/2 - @time 21:50
- * 创建 package day_4_2
- * 创建类 Sty_ProcessControl
- * 流程控制的实例练习
- */
- import java.security.PublicKey;
- import java.util.Scanner;
- /**
- * 1, 编写程序, 实现判断变量 x 的奇偶数.
- * 2, 应用 for 循环打印菱形
- * 3, 使用 while 循环语句计算 1+1/2!+1/3!...1/20! 之和.
- */
- public class Sty_ProcessControl {
- public static void main(String[] args) { // 主方法 main()
- // 使用 Scanner 对象方法控制输入
- Scanner ascanner = new Scanner(System.in);
- // 将输入值赋值给 int 变量 a.
- int a = ascanner.nextInt();
- // 实例化对象,
- Sty_ProcessControl control = new Sty_ProcessControl();
- // 传参数 a 调用判断方法,
- control.sty_JudgeNumber1(a); // if 条件判断语句判断奇偶.
- control.sty_JudgeNumber2(a); // switch 多分支语句判断奇偶.
- // 通过实例化对象调用方法.
- control.sty_Printdiamond(); // for 循环嵌套多级运用打印菱形.
- control.sty_getFactorial(); // 使用 while 循环语句求阶乘.
- }
- /**
- * 通过 if 条件语句判断 x 的奇偶
- */
- public void sty_JudgeNumber1(int anumber){ // 定义方法, 返回值为 int 型, int 型参数 anumber
- if(anumber%2==0){ // 通过 if 条件判断语句, 判断输入的数是否能整除 2.
- System.out.println("偶数"); // 能(true), 输出偶数,
- }else{
- System.out.println("奇数"); // 不能(false), 输出奇数
- }
- }
- /**
- * swicth 多分支语句判断奇偶数
- * @param anumber
- */
- public void sty_JudgeNumber2(int anumber){
- switch (anumber%2){
- case 0:
- System.out.println("偶数");
- break;
- case 1:
- System.out.println("奇数");
- break;
- }
- }
- /**
- * 利用 for 循环打印菱形
- * 1, 首先实现用 for 循环打印出依次递增与递减的的 * 号整列(正三角与倒三角), 形成菱形的一半.
- * 2, 第二步, 实现正反三角数量的翻倍, 然后在这基础上每行的数量需减一, 形成奇数阵列.
- * 第三步, 正反三角的左侧插入对应的三角空格阵列.
- * 最后, 打印结果.
- *
- * 由于 Java 程序使按先后顺序执行, 所以空格整列要写在前面.
- */
- public void sty_Printdiamond(){ // 定义实现打印方法
- for(int i=0;i<5;i++){ // 定义外层 for 循环, 控制打印上半三角形的行数 i.
- for(int j=0;j<=5-i;j++){ // 两个并列子级 for 循环之一, 使用循环控制打印一个递减的倒三角空格阵列.
- System.out.print(" "); // 打印空格.
- }
- for(int k=0;k<i*2-1;k++){ // 连个并行子级 for 循环之一, 使用循环控制打印一个正三角 * 阵列. 并使 * 号数量翻倍并每行减一.
- System.out.print("*"); // 打印 * 号.
- }
- System.out.println(); // 控制换行, 在每行最后执行.
- }
- for (int i=0;i<5;i++){ // 并行外层 for 循环之一, 控制打印倒三角整列.
- for(int j=0;j<=i;j++){
- System.out.print(" ");
- }
- for (int j=10;j>=2*(i+1);j--){
- System.out.print("*");
- }
- System.out.println();
- }
- }
- /**
- * 使用 while 循环语句求阶乘.
- * 阶乘, n!=1*2*3*4*...*n;
- * 1/1+1/(1*2)
- * 思路, 第一步, 先算出每一项的阶乘, 阶乘 = 前一项的阶乘 * 当前项数, 将阶乘定义为 double 型变量, 代入.
- * 第二步, 每项阶乘相加求和. 结果 = 前 n-1 项的和加上当前项, 将结果定义为 aAnswer 变量, 代入.
- * 第三步, 通过 while 循环, 代入变量与公式,(相当于递归的过程).
- */
- public void sty_getFactorial(){
- int i=1; // 定义变量 i; 控制循环次数, 同时也代表了每一项的项数.
- double afactorial=1; // 定义变量 afactorial, 表示每一项的阶乘.
- double aAnswer=0; // 定义 aAnswer 变量, 代表结果.
- while (i<=20){
- afactorial=afactorial*(1.0/i); // 每项阶乘 = 前一项阶乘 * 当前项.
- aAnswer=aAnswer+afactorial; // 最终结果 = 前一项的结果加上当前项的阶乘.
- i++; // 控制变量 i, 在每次运算后向前加 1.
- }
- System.out.println(aAnswer); // 输出答案
- }
- }
运行结果
在练习过程中. 关于通过 for 循环打印菱形一题的分析
把号阵列看作是图形. 整个菱形的打印, 其实是由四个三角形整列完成. 依次排列的顺序为上半部分一个倒三角空格阵列, 一个正三角阵列. 下半部分一个正三角空格序列, 和一个倒三角 * 号阵列.
关于打印菱形的思路, 接下来直接使用代码及图示表示.
首先, 通过图解, 我们知道, 其实一个菱形就是从一个长方形, 取四边中点得到. 那么在程序编辑中如何来实现菱形的演变呢.
1. 我们首先要能够打印一个正三角形, 倒三角形, 这里只需要使 * 递增递减逐行排列即可.
- for(int i=0;i<5;i++){ // 外层 for 循环, 来控制行数.
- for(int k=0;k<i*2-1;k++){ // 子级循环, 控制每行打印 * 的个数. 递增.
- System.out.print("*"); // 打印 * 号
- }
- System.out.println(); // 控制换行, 在每行最后执行.
- }
我们可以明显的察觉到. 这就是一个菱形四分之一的右上的组成部分. 那么我们如何将它演变成菱形呢, 我们可以再进行一次打印, 使它反转成一个倒三角, 即使 * 递减打印.
- for(int i=0;i<5;i++){ // 外层 for 循环, 来控制行数.
- for(int k=0;k<i;k++){ // 子级循环, 控制每行打印 * 的个数. 递增.
- System.out.print("*"); // 打印 * 号
- }
- System.out.println(); // 控制换行, 在每行最后执行.
- }
- for(int i=0;i<5;i++){
- for(int k=0;k<5-i;k++){ // 控制每行打印 * 号的个数, 递减.
- System.out.print("*");
- }
- System.out.println("");
- }
这样, 我们就可以得到一个一半的菱形了, 那么接下来, 我们如何让它向左反转一次呢, 显然我们没办法做到让它左右翻转, 那我们只能先把它摆正, 然后将这两个三角整列使它的内容 (可以理解为面积) 翻倍, 就应当是菱形了. 如何摆正, 是否只要在上方的正三角前面填充一个空格的倒三角整列, 在下方的倒三角前面填充一个正三角整列就可以了, 这里我用 $ 符号代替空格, 以求观察更直观.
- for(int i=0;i<5;i++){ // 外层 for 循环, 来控制行数.
- for (int j=0;j<5-i;j++){ // 倒三角的 $(空格)整列
- System.out.print("$");
- }
- for(int k=0;k<i;k++){ // 子级循环, 控制每行打印 * 的个数. 递增.
- System.out.print("*"); // 打印 * 号
- }
- System.out.println(); // 控制换行, 在每行最后执行.
- }
- for(int i=0;i<5;i++){
- for (int j=0;j<i;j++){ // 正三角的 $(空格)整列
- System.out.print("$");
- }
- for(int k=0;k<5-i;k++){ // 控制每行打印 * 号的个数, 递减.
- System.out.print("*");
- }
- System.out.println("");
- }
最后一步, 将内容翻倍, 但要记得每行 * 号需要减一, 这样才能够组成奇数整列对应组成菱形
完
更新时间:
2019-4-3
3:11
来源: https://www.cnblogs.com/gemuxiaoshe/p/10646496.html