3、Java基础语法(下):程序流程控制
程序流程控制
从键盘获取不同类型的变量:
使用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基础语法(下):程序流程控制的更多相关文章
- Java基础语法(5)-特殊流程控制语句
title: Java基础语法(5)-特殊流程控制语句 blog: CSDN data: Java学习路线及视频 1.嵌套循环结构 将一个循环放在另一个循环体内,就形成了嵌套循环.其中,for ,wh ...
- java 基础one ---运算符and流程控制
首先java这个了解下java的基础 首先java文件都是以.java结尾的 然后 他所有的内容都是有一个入口的就是放在了public static void main(String [] args ...
- Java 基础 引用数据类型 和 流程控制
引用数据类型 与定义基本数据类型变量不同,引用数据类型的变量定义及复制有一个相对固定的步骤和格式: 数据类型 变量名 = new 数据类型(); 如:String st = new String(); ...
- Java语言中的程序流程控制
(1. 流程控制 有三种基本技术可以改变程序的控制流程: A.调用方法 :将导致控制流程离开当前方法,转移到被调用的方法. B.选择 : a. if / else 语句 b. switch语句 ...
- Java基础语法(二)之流程控制语句
流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块 .控制语句分为三类:顺序,选择和循环. “顺序结构”代表”先执行a,再执行b”的逻辑.比如,先找个女朋友, ...
- Java 基础(8)——流程控制
上次的运算符都消化好了吗?每一天都要用到一些哦~ 以前有提到过一嘴,程序执行都是从上到下执行的,emm,学到这里,感觉这句话是对的也是错的了…… 如果都是一行一行执行下去的话,上节课的例子: 今天不上 ...
- Java基础语法(下)
1.数组动态初始化 //数据类型[] 数组名 = new 数据类型[数组长度]; int[] arr = new int[3]; /* * 左边: * int:说明数组中的元素类型是int类型 * [ ...
- Java基础语法(6)-注释
title: Java基础语法(6)-注释 blog: CSDN data: Java学习路线及视频 用于注解说明解释程序的文字就是注释. 提高了代码的阅读性:调试程序的重要方法. 注释是一个程序员必 ...
- Java基础语法(7)-数组
title: Java基础语法(7)-数组 blog: CSDN data: Java学习路线及视频 1.数组的概述 数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并 ...
- 052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试——debug2 多断点调试程序
052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试--debug2 多断点调试程序 本文知识点: Eclipse下程序调 ...
随机推荐
- 如何在jQuery的Ajax调用后管理一个重定向请求
1 success:function(data){ 2 if(data.xx == "xx") 3 { 4 //code... 5 window.location.href =&q ...
- Gridea博客无法载入CSS样式的解决办法
今日在使用Gridea客户端更新博客的过程中,推送到远端仓库后内容显示正常,但是无法载入主题样式,就是没有载入CSS样式,折腾了一下午在搞懂问题出在哪里了,下面说一下自己的解决思路. 问题描述 首先, ...
- 如何在centos上配置802.1Q VLAN标记,linux单网卡多vlan多网段Ip配置案例
介绍 VLAN使将大型网络分成较小且易于管理的网络成为可能.802.1Q是所有供应商都在其网络设备中实施的标准.某些交换机能够将多个VLAN分配给单个网络端口.使用此功能,您可以将多个VLAN分配给单 ...
- 【js】Leetcode每日一题-子数组异或查询
[js]Leetcode每日一题-子数组异或查询 [题目描述] 有一个正整数数组 arr,现给你一个对应的查询数组 queries,其中 queries[i] = [Li, Ri]. 对于每个查询 i ...
- Kafka源码分析(二) - 生产者
系列文章目录 https://zhuanlan.zhihu.com/p/367683572 目录 系列文章目录 一. 使用方式 step 1: 设置必要参数 step 2: 创建KafkaProduc ...
- 如何实现一个 System Services?
<Android 系统开发做什么?>写到 Android System Services 是专注于特定功能的模块化组件,应用框架 API 所提供的功能可与系统服务通信,以访问底层硬件.An ...
- SQLFlow使用中的注意事项--设置篇
SQLFlow 是用于追溯数据血缘关系的工具,它自诞生以来以帮助成千上万的工程师即用户解决了困扰许久的数据血缘梳理工作. 数据库中视图(View)的数据来自表(Table)或其他视图,视图中字段(Co ...
- Truncate用法详解
前言: 当我们想要清空某张表时,往往会使用truncate语句.大多时候我们只关心能否满足需求,而不去想这类语句的使用场景及注意事项.本篇文章主要介绍truncate语句的使用方法及注意事项. 1.t ...
- 深入源码理解SpringBean生命周期
概述 本文描述下Spring的实例化.初始化.销毁,整个SpringBean生命周期,聊一聊BeanPostProcessor的回调时机.Aware方法的回调时机.初始化方法的回调及其顺序.销毁方法的 ...
- ES6中的展开运算符和解构对象
let obj = { a:1 b:2 } let obj2 = { ...obj c:3 d:4 } console.log(obj2)//1,2,3,4,对象展开 //常考题目 let a = 1 ...