Java-03流程控制
Java-03流程控制
-
多写(代码),多写(笔记),多写(文章)
-
多练(交流),多练(思维),多练(技能)
-
多分享(知识),多分享(怎么了),多分享(为什么)
-
最重要(坚持)
-
每个牛B人物背后都有一段苦B的岁月,只要像傻B一样坚持,终将牛B!
1. 用户交互Scanner
java.util.Scanner 是Java 5 的新特征,我们可以通过Scanner类来获取用户的输入
1.1 基本语法
Scanner scanner = new Scanner(System.in);
1.2 常用的API函数
- useDelimiter(Pattern pattern):将此扫描器的分隔模式设置为指定模式
- useDelimiter(String pattern):将此扫描器的分隔模式设置为从指定 String 构造的模式
- delimiter():返回此 Scanner 当前正在用于匹配分隔符的 Pattern
- hasNext():判断扫描器中当前扫描位置后是否还存在下一段
- hasNextLine():如果在此扫描器的输入中存在另一行,则返回 true
- next():查找并返回来自此扫描器的下一个完整标记
- nextLine():此扫描器执行当前行,并返回跳过的输入信息
public void testDemo01() {
Scanner scanner = new Scanner(System.in);
System.out.println(scanner.delimiter().toString()); // \p{javaWhitespace}+
scanner.useDelimiter("、");
System.out.println(scanner.delimiter().toString()); // 、
scanner.useDelimiter(Pattern.compile("\t"));
System.out.println(scanner.delimiter().toString()); // 制表符
}
public void testDemo02() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你需要输入的字符串:");
if (scanner.hasNext()) {
String strFirst = scanner.next(); // 输入:Hello World
System.out.println("你输入的字符串为:" + strFirst); // 输出:Hello
}
scanner.close();
}
public void testDemo03() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你需要输入的字符串:");
if (scanner.hasNextLine()) {
String strSecond = scanner.nextLine(); // 输入:Hello World
System.out.println("你输入的字符串为:" + strSecond); // 输出:Hello World
}
scanner.close();
}
重点讲一下next()和nextLine()的区别:
- next():只读取输入直到空格。它不能读两个由空格或符号隔开的单词。此外,next()在读取输入后将光标放在同一行中。(next()只读空格之前的数据,并且光标指向本行)
- nextLine():读取输入,包括单词之间的空格和除回车以外的所有符号(即。它读到行尾)。读取输入后,nextLine()将光标定位在下一行
1.3 具体实例
题目要求:我们可以输入多个数字,并求其计总数、合计数与平均数,通过输入非数字来结束。
public void testDemo04() {
double dSum = 0;
int iCount = 0;
Scanner scanner = new Scanner(System.in);
System.out.println("请输入任意个数字:");
while (scanner.hasNextDouble()) {
double dTemp = scanner.nextDouble();
iCount ++;
dSum += dTemp;
}
System.out.println("计总数:" + iCount);
System.out.println("合计数:" + dSum);
if (iCount == 0) {
System.out.println("平均数:0");
} else {
System.out.println("平均数:" + (dSum / iCount));
}
scanner.close();
}
2. 顺序结构
- Java的基本机构就是顺序结构,除非特别指明,否则就按照顺序依次执行
- 顺序结构是最简单的算法结构
- 语句与语句之间、框与框之间是按照从上到下的顺序执行的,它是由若干个依次执行的处理步骤组成的
- 它是任何一个算法都离不开的一种基本算法结构
3. 选择结构
3.1 if单选择结构
我们很多时候需要去判断一个事情是否可行,然后我们才去执行,这样一个过程在程序中用if语句来表示
语法
if (布尔表达式) {
// 如果布尔表达式为true将执行的语句
}
例如:
public void structDemo01() {
Scanner scanner = new Scanner(System.in);
int iResult = scanner.nextInt();
if (iCount == 0) {
System.out.println("你输入的数字为:0");
}
scanner.close();
}
3.2 if双选择结构
当条件成立时,则执行 if 部分的代码块; 条件不成立时,则进入 else 部分
语法
if (布尔表达式) {
// 如果布尔表达式为true将执行的语句
} else {
// 如果布尔表达式为false将执行的语句
}
例如:
public void structDemo02() {
Scanner scanner = new Scanner(System.in);
int iResult = scanner.nextInt();
if (iCount == 0) {
System.out.println("你输入的整数为:0");
} else {
System.out.println("你输入的整数不为0");
}
scanner.close();
}
3.3 if多选择结构
在布尔表达式 1 不满足的情况下,才会进行布尔表达式2 的判断;当前面的布尔表达式均不成立时,才会执行 else 块内的代码
语法
if (布尔表达式1) {
// 如果布尔表达式1为true将执行的语句
} else if (布尔表达式2) {
// 如果布尔表达式2为true将执行的语句
} else {
// 当前面的布尔表达式均不成立时,才会执行 else 块内的代码
}
例子
public void structDemo03() {
Scanner scanner = new Scanner(System.in);
int iResult = scanner.nextInt();
if (iCount <= 100 && iCount >= 90) {
System.out.println("优秀");
} else if (iCount <= 89 && iCount >= 79) {
System.out.println("良好");
} else if (iCount <= 79 && iCount >= 60) {
System.out.println("及格");
} else {
System.out.println("成绩不合法");
}
scanner.close();
}
3.4 嵌套的if结构
只有当外层 if 的条件成立时,才会判断内层 if 的条件
语法
if (布尔表达式) {
// 如果布尔表达式为true将执行的语句
if (布尔表达式) {
// 如果布尔表达式为true将执行的语句
} else {
// 如果布尔表达式为false将执行的语句
}
} else {
// 如果布尔表达式为false将执行的语句
}
例子
public void structDemo04() {
String strToday = "周末";
String strWeather = "天晴";
if ("周末".equals(strToday)) {
if ("天晴".equals(strToday)) {
System.out.println("去室外游乐场玩耍!");
} else {
System.out.println("去室内篮球场打球!");
}
} else {
System.out.println("去上班!");
}
}
3.5 switch多选择结构
多选择结构还有一个实现方式就是switch case 语句
switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支
语法
switch (expression) {
case value1 :
// 如果value1为true将执行的语句;
break; // 可选
case value2 :
// 如果value2为true将执行的语句;
break; // 可选
case value3 :
// 如果value3为true将执行的语句;
break; // 可选
default : // 可选
// 如果前面value的值都为false将执行的语句;
}
例子
public void structDemo04() {
String strWeek = "周一";
switch (strWeek) {
case "周一" :
System.out.println("今天是周一,要去上班!");
break;
case "周二" :
System.out.println("今天是周二,要去上班!");
break;
case "周三" :
System.out.println("今天是周三,要去上班!");
break;
case "周四" :
System.out.println("今天是周四,要去上班!");
break;
case "周五" :
System.out.println("今天是周五,要去上班!");
break;
case "周六" :
System.out.println("今天是周六,可以出去放肆玩耍!");
break;
case "周日" :
System.out.println("今天是周日,可以玩耍但要注意节制!");
break;
default :
System.out.println("非法数据!");
}
}
switch case 语句中的变量类型:
- byte、short、int、char
- 从Java SE 7 开始,支持字符串String类型
- 同时case标签必须为字符串常量或字面量
- case 匹配后,执行匹配块里的程序代码,如果没有遇见 break会继续执行下一个的 case 块的内容(case 穿透),直到遇到 break 语句或者 switch 语句块结束
- default 块可以出现在任意位置,也可以省略
4. 循环接口
4.1 while 循环
语法
while (布尔表达式) {
// 循环体
}
例子
public void whileDemo() {
int iCount = 0;
int iSum = 0;
while (iCount <= 100) {
iSum += i;
i++;
}
System.out.println("计算1+2+3+……+100的值为:" + iSum);
}
// 递归算法
public class Plus {
public int sum(int i) {
if (i == 1) {
return 1;
}
return i + sum(i - 1);
}
public static void main(String[] args) {
Plus plus = new Plus();
System.out.println("计算结果:" + plus.sum(100) + "!");
}
}
- 只要布尔表达式为true,循环就会一直执行下去
- 大多数情况是会让循环停止运行,我们需要一个让循环停止失效的方式来结束运行
- 少部分情况需要循环一直执行,比如服务器的请求响应监听……
- 循环条件一直为true就会造成无限循环(死循环),我们正常的业务编程中应该尽量避免无限循环的产生,会影响程序性能或者造成程序卡死崩溃
4.2 do……while 循环
do……while 循环和while 循环相似,不同的是,do……while 循环至少会执行一次
语法
do {
// 循环体
} while (布尔表达式);
例子
public void doWhileDemo() {
int iCount = 0;
while (iCount < 0) {
System.out.println(iCount);
iCount++;
}
System.out.println("==========华丽的分割线==========");
do {
System.out.println(iCount);
iCount++;
} while (a < 0);
}
while 循环和do……while 循环的区别:
- while 循环先判断后执行,而do……while 循环是先执行后判断
- do……while 循环总是保证循环体会被至少执行一次(类似i++和++i的区别)
4.3 for 循环
for 循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构
在Java SE 5 中引入了一种主要用于数组的增强型for循环
语法
for (循环变量初始化; 布尔表达式; 循环变量变化) {
// 循环体
}
例子
public void forDemo() {
int iSum = 0;
for (int i = 1;i <= 100; i++) {
iSum += i;
}
System.out.println("计算结果:" + iSum);
}
练习:用for 循环输出1-1000之间能被5整除的数,并且每行输出3个
public class ForDemo {
public static void main(String[] args) {
// 练习:用for 循环输出1-1000之间能被5整除的数,并且每行输出3个
for (int i = 1; i <= 1000; i++) {
if (i % 5 == 0) {
System.out.print(i + " ");
}
if (i % 15 == 0) {
System.out.println();
}
}
// 打印九九乘法表
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(i + " * " + j + " = " + i * j + "\t");
}
System.out.println();
}
}
}
4.4 增强for 循环
语法
/**
* 声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配,其作用域限定在循环语句块,其值与此时数组元素的值相等
* 表达式:表达式是要访问的数组名,或者是返回值为数组的方法
*/
for (声明语句 : 表达式) {
// 循环体
}
例子
public class ForiDemo {
public static void main(String[] args) {
int[] numbers = {10, 20, 30, 40, 50};
for (int i : numbers) {
System.out.println(i);
}
}
}
5. break、continue和goto
5.1 break
break在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句(break语句也可用于switch语句中使用)
例子
public class BreakDemo {
public static void main(String[] args) {
int i = 0;
while (i <= 10) {
i++;
System.out.println(i);
if (i == 5) {
break;
}
}
}
}
5.2 continue
continue 语句用于循环体中,用于终止某次循环,即跳过当次循环语句,接着进行下一次知否执行循环的判定
例子
public class ContinueDemo {
public static void main(String[] args) {
int i = 0;
while (i <= 10) {
i++;
if (i % 2 == 0) {
continue;
}
System.out.print(i + "\t"); // 1 3 5 7 9 11
}
}
}
5.3 关于goto关键字
- goto 关键字很早就在程序设计语言中出现。尽管goto仍然是Java的一个保留字,但并未在语言中得到正式使用,Java没有goto;然而在break和continue这两个关键字的身上,我们仍能看出一些goto的影子(带标签的break和continue)
- 标签是指后面跟一个冒号的标识符,例如:label:
- 对Java来说,唯一用到标签的地方是在循环语句之前,而在循环之前设置标签的唯一理由:我们希望在其中嵌套另一个循环,由于break和continue关键字通畅只能中断当前循环,但若随同标签使用,他们就会中断到存在标签的地方
例子
public class LabelDemo {
public static void main(String[] args) {
/*
打印101~150之间所有的质数
质数:质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数
*/
int count = 0;
outer : for (int i = 101; i <= 150; i++) {
for (int j = 2; j < i; j++) {
if (i % j == 0) {
continue outer;
}
}
System.out.print(i + "\t"); // 101 103 107 109 113 127 131 137 139 149
}
}
}
6. 练习
打印一个三角形
/*
*
***
*****
*******
*********
*/
private static void printTriangle() {
for (int i = 1; i <= 5; i++) {
for (int j = 5; j >= i; j--) {
System.out.print(" ");
}
for (int j = 1; j <= 2 * i - 1; j++) {
System.out.print("*");
}
System.out.println();
}
}
本文来自博客园,作者:爱Ni说不出口,转载请注明原文链接:https://www.cnblogs.com/ArtherLee/p/14844417.html

浙公网安备 33010602011771号