程序流程控制

从键盘获取不同类型的变量:

使用Scanner类,具体实现步骤:

1、导包:import java.util.Scanner;

2、Scanner的实例化:Scanner scan = new Scanner(System.in);

3、调用Scanner类的相关方法,来获取指定类型的变量

注意:需要根据相应的方法输入指定类型的值,如果输入的数据类型与要求的数据类型不匹配时,会有异常:InputMisMatchException。

使用Scanner类获取int类型的变量:

import java.util.Scanner;
class ScannerTest{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int num = scan.nextInt();
System.out.println(num);
}
}

随机数的生成

double value = Math.random();

生成的随机数double类型value的范围是:【0.0,1.0)

公式:求【a,b】-->(int)(Math.random()*(b - a + 1) + a)

顺序结构

分支结构

分支语句1: if-else结构

if-else使用说明

1、条件表达式必须是布尔表达式(关系表达式或逻辑表达式)、布尔变量

2、语句块只有一条执行语句时,一对{}可以省略,但建议保留

3、if-else语句结构,根据需要可以嵌套使用

4、当if-else结构是“多选一”时,最后的else是可选的,根据需要可以省略

5、当多个条件是“互斥”关系时,条件判断语句及执行语句间顺序无所谓

当多个条件是“包含”关系时,“小上大下 / 子上父下”

例题

1、岳小鹏参加Java考试,他和父亲岳不群达成承诺:

如果:

成绩为100分时,奖励一辆BMW;

成绩为(80,99]时,奖励一台iphone xs max;

当成绩为[60,80]时,奖励一个 iPad;

其它时,什么奖励也没有。

请从键盘输入岳小鹏的期末成绩,并加以判断

import java.util.Scanner;

class IfTest {

​	public static void main(String[] args)  {

​        Scanner scan = new Scanner(System.in);

​        System.out.println("请输出考试成绩");

​        int testScore = scan.nextInt();

if(testScore>100){

​         System.out.println("输入成绩无效");

​        }else if(testScore >= 60 && testScore <= 80){

​         System.out.println("奖励一个 iPad");

}else if(testScore > 80 && testScore <= 99){

​         System.out.println("奖励一台iphone xs max");

}else if(testScore == 100){

​         System.out.println("奖励一辆BMW");

​        }else{

​         System.out.println("什么奖励也没有");

​        }

​	}

}

2、编写程序:由键盘输入三个整数分别存入变量num1、num2、num3, 对它们进行排序(使用 if-else if-else),并且从小到大输出。

import java.util.Scanner;

class IfTest{

​	public static void main(String[] args){

​	Scanner scan = new Scanner(System.in);

​	System.out.println("请输出num1:");

​	int num1 = scan.nextInt();

​	System.out.println("请输出num2:");

​	int num2 = scan.nextInt();

​	System.out.println("请输出num3:");

​	int num3 = scan.nextInt();

​	int num;

​	if (num2 > num1){

​       num = num1;

​    num1 = num2;

​       num2 = num;

​	}

​	if (num3 >= num1){

​        System.out.println("从小到大的顺序为:" + num2 + ',' + num1 + ',' + num3);

​	}else if (num3 >= num2){

​        System.out.println("从小到大的顺序为:" + num2 + ',' + num3 + ',' + num1);

​	}else{

​        System.out.println("从小到大的顺序为:" + num3 + ',' + num2 + ',' + num1);

​	}

​	}

}

3、假设你想开发一个玩彩票的游戏,程序随机地产生一个两位数的彩票,提示用户输入

一个两位数,然后按照下面的规则判定用户是否能赢。

1)如果用户输入的数匹配彩票的实际顺序,奖金10 000美元。

2)如果用户输入的所有数字匹配彩票的所有数字,但顺序不一致,奖金 3 000美元。

3)如果用户输入的一个数字仅满足顺序情况下匹配彩票的一个数字,奖金1 000美元。

4)如果用户输入的一个数字仅满足非顺序情况下匹配彩票的一个数字,奖金500美元。

5)如果用户输入的数字没有匹配任何一个数字,则彩票作废。

import java.util.Scanner;

class IfTest{

​	public static void main(String[] args){

​        Scanner scan = new Scanner(System.in);

​        System.out.println("请输出二位数字:");

​        int imp = scan.nextInt();

​        int value = (int)(Math.random() * 90 + 10);

​        System.out.println("本期的数字为:" + value);

​        int i1 = imp / 10;

​        int i2 = imp % 10;

​        int v1 = value / 10;

​        int v2 = value % 10;

​        if (i1 == v1 && i2 == v2){

​         System.out.println("奖金10 000美元");

​        }else if (i1 == v2 && i2 == v1){

​         System.out.println("奖金 3 000美元");

​        }else if (i1 == v1 || i2 == v2){

​         System.out.println("奖金1 000美元");

​        }else if (i1 == v2 || i2 == v1){

​         System.out.println("奖金500美元");

​        }else{

​         System.out.println("彩票作废");

​        }

​	}

}

分支语句2: switch-case结构

说明

1、根据switch中表达式中的值,依次匹配各个case的常量,一旦匹配成功,则进入相应的case结构中,调用其执行语句,当调用完执行语句完以后,则仍然继续向下执行其他case语句中的执行语句,直到遇到break关键字或者switch-case结构末尾结束为止。

2、break,可以使用在switch-case结构中,表示一旦执行到此关键字,就跳出switch-case结构。

3、switch-case结构中的表达式,只能是如下的六种数据类型之一:byte、short、char、int、枚举类型(JDK5.0新增)、String类型(JDK7.0新增)。

4、case之后只能声明常量,不可以声明范围。4

5、break关键字在switch结构中是可选的。

6、default类似与if-else中的else

default结构是可选的。

7、如果switch中的多个case的执行语句相同,那么可以考虑合并。

例题

1.使用 switch 把小写类型的 char型转为大写。只转换 a, b, c, d, e. 其它的输出 “other”。

提示:String word = scan.next(); char c = word.charAt(0); switch(c){}

import java.util.Scanner;

class SwitchCaseTest{

​	public static void main(String[] args){

​        Scanner scan = new Scanner(System.in);

​        System.out.println("请输入小写字母a~e:");

​        String inp = scan.next();

//scanner无法获取char,转换

​        char c = inp.charAt(0);

​        switch (c){

​        case 'a':

​         System.out.println("A");

​         break;

​        case 'b':

​         System.out.println("B");

​         break;

​        case 'c':

​         System.out.println("C");

​         break;

​        case 'd':

​         System.out.println("D");

​         break;

​        case 'e':

​         System.out.println("E");

​         break;

​        default:

​         System.out.println("other");

​        }

​	}

}

2、从键盘分别输入年、月、日,判断这一天是当年的第几天

注:判断一年是否是闰年的标准:

1)可以被4整除,但不可被100整除

2)可以被400整除

import java.util.Scanner;

class SwitchCaseTest{

​	public static void main(String[] args){
​ Scanner scan = new Scanner(System.in);
​ System.out.println("请输入year:");
​ int year = scan.nextInt();
​ System.out.println("请输入month:");
​ int month = scan.nextInt();
​ System.out.println("请输入day:");
​ int day = scan.nextInt();
​ int total = 365;
​ switch (month){
​ case 1:
​ total -= 31;
​ case 2:
​ //判断是否闰年
​ if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
​ total -= 29;
​ }else{
​ total -= 28;
​ }
​ case 3:
​ total -= 31;
​ case 4:
​ total -= 30;
​ case 5:
​ total -= 31;
​ case 6:
​ total -= 30;
​ case 7:
​ total -= 31;
​ case 8:
​ total -= 31;
​ case 9:
​ total -= 30;
​ case 10:
​ total -= 31;
​ case 11:
​ total -= 30;
​ case 12:
​ total -= 31;
​ }
System.out.println(year + "年" + month +"月"+ day + "日是当年的第" + (total + day) + "天。");
​ }
}

switch-case和if-else的选择:

1、凡是可以使用switch-case的结构,都可以使用if-else

2、当既可以使用switch(表达式取值情况不多时)又可以使用if时,优先选择switch。

循环结构

在某些条件满足的情况下,反复执行特定代码的功能

for循环

例题

1、题目:输入两个正整数m和n,求其最大公约数和最小公倍数。

比如:12和20的最大公约数是4,最小公倍数是60。

说明:break关键字的使用

import java.util.Scanner;

class ForTest{

​	public static void main(String[] args){

​      Scanner scan = new Scanner(System.in);

​      System.out.println("请输入正整数m:");

​      int m = scan.nextInt();

​      System.out.println("请输入正整数n:");

​      int n = scan.nextInt();

  //求最大公约数

​      for (int max = m;max > 0;max--){

​       if (m % max == 0 && n % max == 0){

​           System.out.println(m + "和" + n + "的最大公约数为" + max);

​           break;  //一旦在循环中执行到break,跳出循环

​       }

​      }

  //求最小公倍数

​      for (int min = 1;min > 0;min++){

​       if (min % m == 0 && min % n == 0){

​           System.out.println(m + "和" + n + "的最小公倍数为" + min);

​           break;

​       }

​      }

​	}

}

2、输出所有的水仙花数,所谓水仙花数是指一个3位数,其各个位上数

字立方和等于其本身。

例如: 153 = 111 + 333 + 555

class ForTest{

​	public static void main(String[] args){

​      for (int i = 100;i <= 999;i++){

​       int ge = i % 10;

​       int shi = i / 10 % 10;

​       int bai = i / 100;

​       if (i == ge * ge *ge + shi * shi * shi + bai * bai * bai){

​           System.out.print(i + ";");

​       }

​      }

​	}

}

while循环

初始化部分出了while循环以后仍可以调用

do-while循环

说明:

1、运行的时候会先执行一次循环体部分和迭代部分。

例题

从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入 为0时结束程序。

import java.util.Scanner;

class ForTest{

​	public static void main(String[] args){

​      Scanner scan = new Scanner(System.in);

​      int num0 = 0,num1 = 0,num;

​      do{

​       System.out.println("请输入正整数或者负整数,输入0结束:");

​       num = scan.nextInt();

​       if (num < 0){

​           num0++;

​       }else if (num > 0){

​           num1++;

​       }else if (num == 0){

​           break;

​       }

  }while (true);

​      System.out.println("共输入正整数" + num1 + "个。");

​      System.out.println("共输入负整数" + num0 + "个。");

​	}

}

无限循环格式

for循环

for ( ; ; ){

}

while循环

while(true){

}

do-while循环

do{

}while(true);

结束循环的两种方式

1、循环条件部分返回false

2、在循环体中,执行break

嵌套循环(多重循环)

将一个循环放在另一个循环体内,就形成了嵌套循环。

设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n次。

外层循环控制行数,内层循环控制列数

优化:计算程序运行时间

衡量功能代码的优劣:

1、保证代码的功能正确性;

2、代码的可读性;

3、健壮性;

4、高效率与低存储(算法的好坏):时间复杂度、空间复杂度

//获取当前开始时间距离1970-01-01 00:00:00的毫秒数

long start = System.currentTimeMillis();

....

//获取当前结束时间距离1970-01-01 00:00:00的毫秒数

long end= System.currentTimeMillis();

//时间差计算程序运行时间

System.out.println("所花费的时间:" + (end - start));

关键字break、continue

continue和break的后面不可以声明执行语句。

3、Java基础语法(下):程序流程控制的更多相关文章

  1. Java基础语法(5)-特殊流程控制语句

    title: Java基础语法(5)-特殊流程控制语句 blog: CSDN data: Java学习路线及视频 1.嵌套循环结构 将一个循环放在另一个循环体内,就形成了嵌套循环.其中,for ,wh ...

  2. java 基础one ---运算符and流程控制

    首先java这个了解下java的基础 首先java文件都是以.java结尾的  然后 他所有的内容都是有一个入口的就是放在了public static void main(String [] args ...

  3. Java 基础 引用数据类型 和 流程控制

    引用数据类型 与定义基本数据类型变量不同,引用数据类型的变量定义及复制有一个相对固定的步骤和格式: 数据类型 变量名 = new 数据类型(); 如:String st = new String(); ...

  4. Java语言中的程序流程控制

    (1. 流程控制 有三种基本技术可以改变程序的控制流程: A.调用方法 :将导致控制流程离开当前方法,转移到被调用的方法. B.选择  :   a. if / else 语句 b. switch语句 ...

  5. Java基础语法(二)之流程控制语句

    流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块 .控制语句分为三类:顺序,选择和循环. “顺序结构”代表”先执行a,再执行b”的逻辑.比如,先找个女朋友, ...

  6. Java 基础(8)——流程控制

    上次的运算符都消化好了吗?每一天都要用到一些哦~ 以前有提到过一嘴,程序执行都是从上到下执行的,emm,学到这里,感觉这句话是对的也是错的了…… 如果都是一行一行执行下去的话,上节课的例子: 今天不上 ...

  7. Java基础语法(下)

    1.数组动态初始化 //数据类型[] 数组名 = new 数据类型[数组长度]; int[] arr = new int[3]; /* * 左边: * int:说明数组中的元素类型是int类型 * [ ...

  8. Java基础语法(6)-注释

    title: Java基础语法(6)-注释 blog: CSDN data: Java学习路线及视频 用于注解说明解释程序的文字就是注释. 提高了代码的阅读性:调试程序的重要方法. 注释是一个程序员必 ...

  9. Java基础语法(7)-数组

    title: Java基础语法(7)-数组 blog: CSDN data: Java学习路线及视频 1.数组的概述 数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并 ...

  10. 052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试——debug2 多断点调试程序

    052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试--debug2 多断点调试程序 本文知识点: Eclipse下程序调 ...

随机推荐

  1. (二)SQL语句

    语法规则 不区分大小写,但是建议关键字大写,表名.列名小写 SELECT * FROM user; 支持多行编写sql语言(在SQLyog中可以用F12来快速格式化语句) # 查询cno=20201/ ...

  2. intellij idea的Maven项目运行报程序包找不到的错误

    概括一句话:IDEA的Terminal命令行输入mvn idea:idea或者mvn idea:module , 即可解决 重做过开发环境后在intellij idea中载入java工程,通过mave ...

  3. sql常识-RIGHT JOIN

    SQL RIGHT JOIN 关键字 RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行. RIGHT JOIN ...

  4. 使用FastDFS进行文件管理

    使用FastDFS进行文件管理 FastDFS简介 FastDFS: FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等, ...

  5. 【Azure Developer】使用Microsoft Graph API 如何批量创建用户,用户属性中需要包含自定义字段(如:Store_code,Store_name等)

    Microsoft Graph 是 Microsoft 365 中通往数据和智能的网关. 它提供统一的可编程模型,可用于访问 Microsoft 365.Windows 10 和企业移动性 + 安全性 ...

  6. 从系统的角度分析影响程序执行性能的因素——SA20225205 黄兴宇

    实验总结分析报告:从系统的角度分析影响程序执行性能的因素 1.请您根据本课程所学内容总结梳理出一个精简的Linux系统概念模型,最大程度统摄整顿本课程及相关的知识信息,模型应该是逻辑上可以运转的.自洽 ...

  7. OC与Swift混编,三种场景的实现方式

    多语言并存时期,混编成为一种必须的方式 ,在多场影中实现OC和Swift语言的并存原来是如此简单 第一种场景,App中实现混编 创建桥接文件*.h 新建一个桥接文件,New File 选择 Heade ...

  8. Azure DevOps(一)利用Azure DevOps Pipeline 构建应用程序镜像到AWS ECR

    一,引言 最近项目上让开始学习AWS,作为一名合格的开发人员,当然也是学会利用Azure DevOps Pipeline 将应用程序部署到 AWS ECS(完全托管的容器编排服务).我们要学会将应用程 ...

  9. [c++] 常犯错误

    更改变量值时想清楚对后面程序的影响 scnaf & == 数组下标从0开始 不赋初值导致的垃圾数据 全局flag和局部flag

  10. Java中日志组件详解

    avalon-logkit Java中日志组件详解 lanhy 发布于 2020-9-1 11:35 224浏览 0收藏 作为开发人员,我相信您对日志记录工具并不陌生. Java还具有功能强大且功能强 ...