Java流程控制
笔记整理来源 B站UP主狂神说 https://www.bilibili.com/video/BV12J41137hu?p=20
用户交互Scanner
scanner对象,java给我们提供了这样一个工具类,我们可以获取用户输入。java.util.Scanner是java5的新特征,我们可以通过Scanner类来获取用户的输入。
基本语法:
Scanner s = new Scanner(System.in);
通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据。
next():
- 一定要读取到有效字符后才可以结束输入
- 对输入有效字符之前遇到的空白,next()方法会自动将其去掉。
- 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
- next()不能的得到带有空格的字符串。
- 用的场景较少。
nextLine()//比较常用
-
以enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符。
-
可以获得空白
-
package com.wang.Scanner; import java.util.Scanner; public class Test01 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("input:"); String str = scanner.nextLine(); System.out.println("output:"+str); scanner.close(); } }
顺序结构
java的基本结构就是顺序结构;
一切其他结构的基础;
选择结构
if单选泽结构
if双选择结构
if多选择结构
- if语句可以有若干个else if语句,一旦其中一个else if语句检测为ture,其他的else if以及else语句都将跳过执行。
嵌套的if结构
switch机构
-
switch(expression){ case value: //语句 break; case value: //语句 break; default://可选 //语句 }
-
变量类型可以是:byte、short、int或者char
-
从javase7开始,支持String类型了。
-
case标签必须为字符串常量或字面量。
-
case必须带break,不然会穿透。
-
看源码是个核心思想。
循环结构
while 循环
-
while(布尔表达式){ // 循环内容 }
-
我们大多数会让循环停止下来。
-
while(true){ //死循环,通常用于一些服务器的请求相应监听等。 }
do…while 循环
-
与while相似,不同的是,do…while循环至少会执行一次。
-
do{ i++; sum = sum +i; }while(i<100);
-
先执行后判断,确保循环至少被执行一次!
for 循环(十分重要)
-
可以是循环结构变得简单
-
for (int i=1; i<=100; i++){//初始化+条件判断+迭代 System.out.println(i); }
-
for循环结构是一种支持迭代的通用结构,是最有效、最灵活的循环结构。
-
for循环执行的次数是在执行前就确定的。
-
在IDEA中可通过100.for直接生成对应语句。
-
初始化可以是空语句;布尔表达值也可以为空;迭代也可为空。
-
println//输出完会换行
-
print //输出完不会换行
增强for循环
-
java5引入的一种主要用于数组合集合的增强型for循环
-
主要用于数组的增强型循环
-
格式如下
-
public class For_Demo05 { public static void main(String[] args) { int[] numbers = {10,20,30,40,50}; for (int i = 0; i<5; i++){ System.out.println(numbers[i]); } System.out.println("======================"); //遍历数组的元素 for (int x: numbers){ System.out.println(x); } //两个for循环结构一样,下边为增强型for循环。 } }
break & continue & goto 关键字
-
break用于强行退出循环
-
continue用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一是否执行循环的判定。
-
goto关键字
- 未在java中正式使用。
- 但是在带标签的break和continue中能看到goto的 影子。
- “标签”是指后面跟一个冒号的标识符,例如:label:
- 对于java来说唯一用到标签的地方是循环语句之前。而在你循环之前设置标签的唯一理由是:我们希望在其中嵌套另一个循环,由于break和continue关键字通常只终端当前循环,但若随同标签使用,它们呢就会议中断到存在标签的地方。
-
public class Break_Demo01 { public static void main(String[] args) { int i = 0; while(i<100){ i++; System.out.println(i); if(i==30){ break;//立刻跳出循环,不执行剩余部分。 } } System.out.println("123"); } }
-
public class Continue_Demo01 { public static void main(String[] args) { int i = 0; while (i<100){ i++; if(i%10==0){ System.out.println(); continue;//到了这个地方,程序会立马回到最开始的地方。 } System.out.print(i); } } }
-
标签continue
-
public class Labe_Demo01 { public static void main(String[] args) { //打印101-150之间所有的质数 //质数是指在大于1的自然数中,除了1和它本身以外不再有其他因素的自然数。 int count = 0; //不建议使用,了解就好,相当于goto语句。 //只循环到i/2是因为一个数的因数一定小于等于他的一半。 outer:for(int i = 101; i < 150; i++){ for(int j = 2; j < i/2; j++){ //这里其实就是计算从2到一半位置的所有可能的因数 //从而查看是否存在因数,加上1的话就全部他跳出了 if(i % j == 0){ continue outer; } } System.out.print(i+" "); } } }
练习
public class Test_Demo01 {
public static void main(String[] args) {
//打印三角形
for (int i = 1; i <= 5; i++) {
for (int j = 5; j >=i; j--) {
System.out.print(" ");
}
for (int j = 1; j <=i; j++) {
System.out.print("*");
}
for (int j = 1; j <i; j++) {
System.out.print("*");
}
System.out.println();
}
}
}