Java流程控制

1、用户交互Scanner

  • next():
    1. 一定要读取到有效字符才可以结束输入
    2. 对输入有效字符之前遇到的空白,用next()方法会自动将其去掉
    3. 只有输入有效字符后才将其后面的空白作为分隔符或者结束符
    4. next()不能得到带有空格的字符串 ```java package com.Frink.base.Scanner;

import java.util.Scanner;

public class Demo02 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println(“使用next方式接收:”); //判断用户有没有输入字符串 if (scanner.hasNext()){ //使用next方式接收 String str = (String) scanner.next(); System.out.println(“输出的内容为:”+str); } //凡是属于IO流的类不关闭就会一直占用资源 scanner.close(); } } 使用next方式接收: java javac 输出的内容为:java

Process finished with exit code 0

  1. - nextLine()
  2. 1. Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符
  3. 1. 可以获得空白
  4. ```java
  5. package com.Frink.base.Scanner;
  6. import java.util.Scanner;
  7. public class Demo01 {
  8. public static void main(String[] args) {
  9. Scanner scanner = new Scanner(System.in);
  10. System.out.println("使用nextLine方式接收:");
  11. if (scanner.hasNextLine()){
  12. String str = scanner.nextLine();
  13. System.out.println("输出的内容为:"+str);
  14. }
  15. scanner.close() ;
  16. }
  17. }
  18. 使用nextLine方式接收:
  19. java javac
  20. 输出的内容为:java javac
  21. Process finished with exit code 0

Scnner进阶用法
用于求和以及计算平均值的案例

  1. package com.Frink.base.Scanner;
  2. import java.util.Scanner;
  3. public class Demo05 {
  4. public static void main(String[] args) {
  5. //可以输入多个数字,求个并计算平均值,输入一个数字用回车确认,并通过非数字来结束运算
  6. Scanner scanner = new Scanner(System.in);
  7. double sum = 0;
  8. //计算输入了多少个数字
  9. int m = 0;
  10. //通过循环来判断是否还还有输入。并在里面进行一次求和和统计
  11. while (scanner.hasNextDouble()){
  12. double v = scanner.nextDouble();
  13. m = m + 1;
  14. //m = m +1
  15. sum = sum + v;
  16. System.out.println("你输入了第"+m+"个数据,当前结果sum="+sum);
  17. }
  18. System.out.println(m + "个数的和为" + sum);
  19. System.out.println(m + "个数的平均值是" + (sum / m));
  20. scanner.close();
  21. }
  22. }
  23. 10
  24. 你输入了第1个数据,当前结果sum=10.0
  25. 30
  26. 你输入了第2个数据,当前结果sum=40.0
  27. 50
  28. 你输入了第3个数据,当前结果sum=90.0
  29. x
  30. 3个数的和为90.0
  31. 3个数的平均值是30.0
  32. Process finished with exit code 0

2、顺序结构

  • Java的基本结构就是顺序结构,除非热别指明,否则就按照顺序一句一句执行。
  • 顺序结构是Java最简单的算法结构
  • 语句与语句之间,框与框之间是按照从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,他是任何一个苏三发都离不开的一种基本算法结构

    3、选择结构

    if单选择结构

    在语句中用if语句去判断这一个语句是否可行
    语法:
    image.png
    image.png ```java public class IfDemo01 { public static void main(String[] args) {
    1. Scanner scanner = new Scanner(System.in);
    2. System.out.println("请输入内容:");
    3. String s = scanner.nextLine();
    4. //equals:用于判断字符串是否相等
    5. if (s.equals("Hello")){
    6. System.out.println(s);
    7. }
    8. System.out.println("End");
    9. scanner.close();
    } }
  1. <a name="e7PKE"></a>
  2. ### if双选择结构
  3. 语法<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/25423415/1637739065447-e8fae52b-d657-4b7a-a243-36206c6a3dd7.png#clientId=uc2962394-a41f-4&from=paste&height=168&id=u4b96e8da&margin=%5Bobject%20Object%5D&name=image.png&originHeight=335&originWidth=304&originalType=binary&ratio=1&size=55674&status=done&style=none&taskId=u30fd136f-e823-4f1f-8bae-11901fb36b4&width=152)<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/25423415/1637739072998-d06c59c4-d5d0-4e3e-9448-cdfaad416d74.png#clientId=uc2962394-a41f-4&from=paste&height=95&id=u7f9eec6c&margin=%5Bobject%20Object%5D&name=image.png&originHeight=189&originWidth=394&originalType=binary&ratio=1&size=46466&status=done&style=none&taskId=u640ae2c3-39d7-4fad-920e-237d091ca0f&width=197)
  4. ```java
  5. public class IfDemo02 {
  6. public static void main(String[] args) {
  7. Scanner scanner = new Scanner(System.in);
  8. System.out.println("请输入成绩:");
  9. int score = scanner.nextInt();
  10. if (score>60){
  11. System.out.println("及格");
  12. }else {
  13. System.out.println("不及格");
  14. }
  15. scanner.close();
  16. }
  17. }

公司要收购一个软件,成功了:给人支付100万元,失败了:自己找人开发

  1. public class Excise03 {
  2. public static void main(String[] args) {
  3. Scanner scanner = new Scanner(System.in);
  4. System.out.println("是否成功:");
  5. int succse = scanner.nextInt();
  6. if (succse == 1 ){
  7. System.out.println("支付100万元");
  8. }else {
  9. System.out.println("自己开发");
  10. }
  11. scanner.close();
  12. }
  13. }

if多选择结构

语法
image.png

  1. public class IfDemo03 {
  2. public static void main(String[] args) {
  3. Scanner scanner = new Scanner(System.in);
  4. System.out.println("请输入成绩");
  5. int score = scanner.nextInt();
  6. if (score==100){
  7. System.out.println("S");
  8. }else if (score<100 && score>=90){
  9. System.out.println("A");
  10. }else if (score<90 && score>=80){
  11. System.out.println("B");
  12. }else if (score<80 && score>=70){
  13. System.out.println("C");
  14. }else if (score<70 && score>=60){
  15. System.out.println("D");
  16. }else if (score<60 && score>=0){
  17. System.out.println("E");
  18. }else{
  19. System.out.println("成绩不合法");
  20. }
  21. scanner.close();
  22. }
  23. }

嵌套循环

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

switch多选择结构

  1. 多选择结构还有一个实现方式是swit case语句
  2. swit语句判断一个变与一些列值中的某个值是否相等,每个值成为一个分支

image.png

  1. switch语句中的变量可以是

    • byte、short、int、char ```java public class SwitchDemo01 { public static void main(String[] args) { //case穿透 switch匹配一个值 char grade = ‘E’; switch (grade){

      1. case'A':
      2. System.out.println("优秀");
      3. break;//可选
      4. case'B':
      5. System.out.println("良好");
      6. break;
      7. case'C':
      8. System.out.println("一般");
      9. break;
      10. case'D':
      11. System.out.println("较差");
      12. break;
      13. case'E':
      14. System.out.println("极差");
      15. break;
      16. default:
      17. System.out.println("未知等级");

      }

      } }

  1. - **switch同时支持String**
  2. ```java
  3. public class SwitchDemo02 {
  4. public static void main(String[] args) {
  5. String name = "YANG";
  6. //表达式的结果可以是字符串
  7. //字符的本质还是数字
  8. //反编译Java---class(字节码文件)----反编译(IDEA)
  9. switch (name){
  10. case "JIDA":
  11. System.out.println("JIDA");
  12. break;
  13. case "FrinkYang":
  14. System.out.println("FrinkYang");
  15. break;
  16. default:
  17. System.out.println("HUI");
  18. }
  19. }
  20. }

编译结果

  1. //
  2. // Source code recreated from a .class file by IntelliJ IDEA
  3. // (powered by FernFlower decompiler)
  4. //
  5. package com.Frink.Struct;
  6. public class SwitchDemo02 {
  7. public SwitchDemo02() {
  8. }
  9. public static void main(String[] args) {
  10. String name = "YANG";
  11. byte var3 = -1;
  12. switch(name.hashCode()) {
  13. case 2276860:
  14. if (name.equals("JIDA")) {
  15. var3 = 0;
  16. }
  17. break;
  18. case 1093499227:
  19. if (name.equals("FrinkYang")) {
  20. var3 = 1;
  21. }
  22. }
  23. switch(var3) {
  24. case 0:
  25. System.out.println("JIDA");
  26. break;
  27. case 1:
  28. System.out.println("FrinkYang");
  29. break;
  30. default:
  31. System.out.println("HUI");
  32. }
  33. }
  34. }
  • 同时case标签必须为字符串常量或者字面量

    4、循环结构

    while循环

    • while是最基本的循环,结构为:

      1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/25423415/1637748416969-505bc422-5c39-4782-9f6e-7ff22c595671.png#clientId=uc2962394-a41f-4&from=paste&height=81&id=ud098cedd&margin=%5Bobject%20Object%5D&name=image.png&originHeight=162&originWidth=415&originalType=binary&ratio=1&size=29714&status=done&style=none&taskId=u7a510289-6c16-40fb-b9d7-c8fc507fd24&width=207.5)
    • 只要布尔表达式为true。循环就会一直执行下去

    • 我们大多是情况下是会让循环停止下来的,只需要一个让表达式失效的方式来结束
    • 少部分情况需要循环一直运行,不如服务器的请求响应监听等
    • 循环条件一直为true就会造成无限循环,我们正常编程中不应该出现无限循环。会影响程序性能或者造成程序卡死崩溃

      1. public class Excise04 {
      2. public static void main(String[] args) {
      3. int i = 0;
      4. int sum = 0;
      5. while (i<=100){
      6. sum = sum + i;
      7. i++;
      8. System.out.println(sum);
      9. }
      10. }
      11. }

      do…whlie循环

    • 对于while语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件也要至少执行一次.

    • do…while循环和while循环类似,不同的是,do…while循环至少会执行一次

image.png

  1. - whiledo..while的区别:
  2. - while先判断后执行。do...while是限制性后判断
  3. - do...while总是保证循环会至少被执行一次!
  1. public class DoWhileDemo02 {
  2. public static void main(String[] args) {
  3. int a = 0;
  4. while (a<0){
  5. System.out.println(a);
  6. a++;
  7. }
  8. System.out.println("==================================");
  9. do{
  10. System.out.println(a);
  11. a++;
  12. } while (a<0);
  13. }
  14. }

for循环

  1. - 虽然所有循环都可以用d..whliewhile来表示,但Java提供了一种语句--For循环,是一些循环结构变得更加简单
  2. - for循环执行的次数是在执行前就确定的:

image.png

  1. - for循环语句是支持迭代的一种通用接哦古,是最有效、最灵活的循环结构
  1. public class ForDemo01 {
  2. public static void main(String[] args) {
  3. int a = 1;//初始化条件
  4. while (a<100){//判断条件
  5. System.out.println(a);//循环体
  6. a+=2;//迭代 a = a + 2
  7. }
  8. //初始化 //条件判断 //迭代
  9. for (int i=1;i<=100;i++){
  10. System.out.println(i);
  11. }
  12. System.out.println("=========================");
  13. for (int q=3;q<=10;q++){
  14. System.out.println(q);
  15. }
  16. }
  17. }

不确定次数循环

for(;;) // while(ture)
for语句练习

  1. 输出一个99乘法表

    1. public class ForDemo04 {
    2. public static void main(String[] args) {
    3. for (int j = 0; j <= 9; j++) {
    4. for (int i = 1; i <= j; i++) {
    5. System.out.print(j+"*"+i+"="+(j*i) + "\t");
    6. }
    7. System.out.println();
    8. }
    9. }
    10. }
  2. 列出0-1500中可以被5整除的数,并且要求三个一行

    1. public class Excise06 {
    2. public static void main(String[] args) {
    3. for (int i = 0; i <=1000; i++) {
    4. if (i%5==0){
    5. System.out.print(i+"\t");
    6. }if (i%15==0){
    7. System.out.println();
    8. }
    9. }
    10. }
    11. }
  3. 求0-100中奇数和偶数的和 ```java public class ExciseDemo05 { public static void main(String[] args) {

    1. int oddSUm = 0;
    2. int evenSum= 0;
    3. for (int i = 0; i < 100; i++) {
    4. if (i%2!=0){
    5. oddSUm = oddSUm + i;
    6. }else{
    7. evenSum = evenSum + i;
    8. }
    9. }
    10. System.out.println("奇数的和=" + oddSUm);
    11. System.out.println("偶数的和=" + evenSum);

    } }

  1. <a name="o0CGa"></a>
  2. ## 5、break&continue
  3. <a name="V1dE3"></a>
  4. ### break
  5. break在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。
  6. ```java
  7. public class BreakDemo01 {
  8. public static void main(String[] args) {
  9. int i = 1;
  10. while (i<100){
  11. i++;
  12. System.out.println(i);
  13. if (i==10){
  14. break;
  15. }
  16. }
  17. }
  18. }

continue

continue语句再循环语句体中,用于终止某次循环,即跳过循环体中尚未执行的语句,接着进行下一次是执行的判定

  1. public class ContinueDemo01 {
  2. public static void main(String[] args) {
  3. int i = 0;
  4. while (i<100){
  5. i++;
  6. if (i%10==0){
  7. System.out.println();
  8. continue;
  9. }
  10. System.out.print(i);
  11. }
  12. }
  13. }

6、练习

输出一个三角形,行数为5

  1. public class Excise08 {
  2. public static void main(String[] args) {
  3. for (int i = 1; i <= 5; i++) {
  4. for (int j = 5; j >= i; j--) {
  5. System.out.print(" ");
  6. }
  7. for (int j = 1; j <= i; j++) {
  8. System.out.print("*");
  9. }
  10. for (int j = 1; j < i; j++) {
  11. System.out.print("*");
  12. }
  13. System.out.println();
  14. }
  15. }
  16. }