Java 流程控制结构 学习笔记(2021.05.19)
流程控制结构学习
一、Scanner类的使用学习
在学习流程控制结构中我们频繁用到scanner类,在此我们先学习scanner类(扫描器)如何使用。
由于“类”的概念还没学习过,就当作是一个可以直接使用的工具概念即可,学会如何使用照着做即可
1. Scanner类基础使用方法
既然scanner是一个类(一个工具概念),我们使用这个工具概念时,就应该将概念实体化,变成一个真正的工具,再用它做事。
下面是如何使用Scanner的方法
public class DemoScannerBase {
public static void main(String[] args) {
//Scanner的基本使用方法
//获得一个scanner(扫描器)
Scanner s = new Scanner(System.in); //system.in的意思是使用系统的输入流,这里的new是实体化这个工具的意思
System.out.print("请输入内容让扫描器扫描:");
String str = "没有内容!";
if(s.hasNext()){//如果扫描器s有内容执行以下
str = s.nextLine();//将扫描器s的下一行赋值给str
}
System.out.println(str);
s.close();//将扫描器关闭(养成习惯!)
}
}
2. Scanner进阶使用
在Scanner工具中,系统给我们内置了许多方法(这些方法就是工具本身有的功能)
下面我们对Scanner进行进阶学习。
对Scanner的方法例如:next(); nextLine(); hasNext(); hasNext [ Type ] ()如hasNextDouble() 等进行学习实践。
demo和解释在如下代码:
import java.util.Scanner;
public class DemoScannerLevelUp {
public static void main(String[] args) {
/*
next和nextLine的区别:
next():
1、一定要读取到有效字符后才可以结束输入。
2、对输入有效字符之前遇到的空白,next()方法会自动将其去掉。
3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
4、next()不能得到带有空格的字符串。
nextLine():
1、以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符。
2、可以获得空白。
*/
Scanner scanner = new Scanner(System.in);
String str = "没有内容";
//使用next()
System.out.print("请输入内容(next):");
if(scanner.hasNext()){//hasNext()方法的功能是判断是否有下一个需要被扫描的对象
str = scanner.next();
}
scanner.nextLine();//让扫描器清空未读数据
System.out.println(str);
str = "没有内容";
//使用nextLine()
System.out.print("请输入内容(nextline):");
if(scanner.hasNext()){
str = scanner.nextLine();
}
System.out.println(str);
//使用scanner内置方法判断输入的数据类型。
str = "不是整数";
System.out.print("请输入整数内容:");
if(scanner.hasNextInt()){
str = scanner.nextLine();
}
System.out.println(str);
scanner.close();
}
}
demo2:
import java.util.Scanner;
public class DemoScannerUse {
public static void main(String[] args) {
/*
输入数字并且以回车分开,以非整数作为结束标志,输出总数、个数、平均数。
*/
System.out.print("请输入数字:");
Scanner scanner = new Scanner(System.in);
double sum = 0.0d;
int count = 0;
while(scanner.hasNextDouble()){//下个是否为double类型被扫描
double i = scanner.nextDouble();
sum+=i;
count+=1;
}
System.out.println("总数:"+sum);
System.out.println("个数:"+count);
System.out.println("平均数:"+sum/count);
}
}
二、顺序结构
顺序结构是最简单的流程控制结构,
也是哪一种算法都必须拥有的结构,
简单却重要!
public class DemoOrder {
public static void main(String[] args) {
/*
顺序结构是最简单的流程控制结构,
也是哪一种算法都必须拥有的结构,
简单却重要!
*/
System.out.println("执行第一行,接下来是第二行。。");
System.out.println("执行第二行,接下来是第三行。。");
System.out.println("执行第三行,接下来是第四行。。");
System.out.println("执行第四行,接下来是第五行。。");
System.out.println("执行第五行");
}
}
三、选择结构
在编写程序中,经常有根据条件是否正确来判断是否执行代码的需求,这时候就需要选择结构登场。
1. 单重选择
形如:if(表达式) {代码块}
对表达式进行判断是非,如果是则执行代码块,如果不是则跳过代码块。
//单重选择
Scanner scanner = new Scanner(System.in);
System.out.print("请输入判断内容:");
String str = "";
if(scanner.hasNext()){
str = scanner.nextLine();
}
if (str.equals("123")){//判断内容是否为"123"决定是否执行下面括号中的代码
System.out.println("内容正确,内容为:"+str);
}
2. 双重选择
形如:
if(表达式) {代码块1}
else {代码块2}
判断表达式内容的真假,真则执行代码块1,假则执行代码块2
//双重选择
System.out.print("请输入判断内容:");
str = "";
if(scanner.hasNext()){
str = scanner.nextLine();
}
if (str.equals("123")){//真则执行内容正确代码
System.out.println("内容正确,内容为:"+str);
}else {//假则执行内容错误代码
System.out.println("内容错误!");
}
3. 多重选择
形如:
if (表达式1){
代码块1
}else if(表达式2)){
代码块2
}else if(表达式3){
代码块3
}else if(表达式4){
代码块4
}else{
代码块5
}
判断表达式1234的真假,真则执行首个真的代码块,都假则执行代码块5,表达式和代码块都不限数量。
System.out.print("请输入判断内容:");
str = "";
if (scanner.hasNext()){
str = scanner.nextLine();
}
if (str.equals("1")){
System.out.println("内容是:1");
}else if(str.equals("2")){
System.out.println("内容是:2");
}else if(str.equals("3")){
System.out.println("内容是:3");
}else if(str.equals("4")){
System.out.println("内容是:4");
}else{
System.out.println("内容不是1、2、3、4");
}
4. switch选择
形如:
switch (表达式){
case 表达式结果1 :
代码块1
break;
case 表达式结果2 :
代码块2
break;
case 表达式结果3 :
代码块3
break;
case 表达式结果4 :
代码块4
break;
default://可以不要
代码块5
break;
}
根据表达式结果判断执行哪一个代码块,表达式的结果是表达式结果1则执行代码块1,如此类推,如果都不是则执行代码块5。
//switch结构
System.out.print("请输入判断内容:");
str = "";
if (scanner.hasNext()){
str = scanner.nextLine();
}
switch (str){
case "1" :
System.out.println("内容是1");
break;
case "2" :
System.out.println("内容是2");
break;
case "3" :
System.out.println("内容是3");
break;
case "4" :
System.out.println("内容是3");
break;
default:
System.out.println("内容不是1、2、3、4");
break;
}
四、循环结构
在某种条件下,可以一次又一次的做指定的代码。
1. while循环
/*
while,形如:
while(表达式){
表达式为真则一直执行
}
*/
int i = 0;
while(i < 10){
System.out.println(i);
i++;
}
2. do while循环
/*
do while,形如:
do{
//循环判断表达式为真则执行此处代码块,且先执行一次再进行此次判断
}while(循环判断表达式);
*/
int i2=110;
do{
System.out.println(i2);
i2++;
}while(i2<=10);
3. for循环
/*
for循环,形如:
for(初始化表达式;每次循环条件表达式;每次循环结束执行表达式){
//循环判断表达式为真则执行此处代码块
}
如果没有初始化表达式、循环判断表达式、就是死循环
*/
for (int i1 = 0; i1 < 100; i1++) {
System.out.print(i1+ " ");
}
4. for循环增强
/*
增强for循环:一般用于循环输出数组、列表、集合,形如:
for(列表中元素类型的标量:列表){
//循环代码块
}
*/
int[] nums={1,2,3,4,5,6,7,8,9};
for (int num : nums) {
System.out.print(num);
}
System.out.println();
五、break&continue
1. break
打断当前循环,直接进入下一行代码。
//break的使用
Scanner scanner = new Scanner(System.in);
while (true){
String str="";
str = scanner.nextLine();
if(str.equals("end")){
break;
}
System.out.println(str);
}
2. continue
在循环中,跳过此次循环并且跳转至指定的地方。
//continue的使用(执行到continue时,打断循环并且跳转到指定位置)
xxx:for (int i1 = 0; i1 < 10; i1++) {//循环10行
for (int i3 = 0; i3 < 10; i3++) {//循环10列
if(i1==3&&i3==5){//循环到第3行第5列时打断此行直接跳转到下一行的循环
System.out.println();
continue xxx;
}
System.out.print(i3+" ");
}
System.out.println();
}
*3. goto(了解即可)
关于goto关键字
goto关键字狼早就在程序设计语言中出现。尽管goto仍是Java的一个保留字,但并未在语言中得到正式使用;
Java没有goto。然而,在break和continue这两个关键字的身上,我们仍然能看出一些goto的影子---带标签的break和continue。
“标签”是指后面跟一个冒号的标识符,例如: label:
对Java来说唯一用到标签的地方是在循环语句之前。而在循环之前设置标签的唯一理由是:我们希望在其中嵌套另一个循环,由于break和continue关键字通常只中断当前循环。但若随同标签使用,它们就会中断到存在标签的地方。
六、练习题
大家写代码的时候要多多自己练习分析,痛苦一时,受益长久
1. 九九乘法表
//九九乘法表
for (int i = 1; i <= 9; i++) {//循环1~9行
for (int j = 1; j <= i; j++) {//循环1~i个列(i是当前第几行,例如第四行就是1到4个列,分别是1*4、2*4、3*4、4*4)
System.out.print(j+" * "+i+" = "+i*j+"\t");//输出i行j列相乘的数
}
System.out.println();
}
2. 输出1-1000质数
//输出1~1000的质数
xxx:for (int i = 1; i <= 1000; i++) {
for (int i1 = 2; i1 <= i / 2; i1++) {
if(i%i1==0) continue xxx;
}
System.out.print(i+" ");
}
3. 打印5行高的三角形
for (int i = 1; i <= 5; i++) {//循环5行
for (int j = 1;j<=5-i;j++){//循环空格,空格个数为:5-行高
System.out.print(" ");
}
for(int k=1;k<=2*i-1;k++){//循环*,8个数为:2*行高-1
System.out.print("*");
}
System.out.println();//换到下一行
}

浙公网安备 33010602011771号