Java 流程控制

发布时间 2023-12-30 21:56:24作者: 初夏如霞

用户交互 Scanner

  • Scanner 可以获取用户的输入内容,类似于 Python 的 input。

  • 基本语法

    import java.util.Scanner;
    Scanner s = new Scanner(System.in);
    
  • 通过 Scanner 类的 next()与 nextline()方法获取输入的字符串,在读取前我们一般需要使用 hasNext()与 hasNextLine()判断是否还有输入的数据。

    import jaa.util.Scanner;
    public class Test{
    	public static void main(String[] args){
    		Scanner scanner = new Scanner(System.in);	//创建一个扫描器对象用于接收数据
    		System.out.println("使用 next 方式接收:");	
    		
    		//判断用户有没有输入字符
    		if (scanner.hasNext()){
    			String str = scanner.next();
    			System.out.println("输出内容为:"+str);//如果输入 hello world!,那么只会输出 hello
    		}
    		
    		scanner.close();	//关闭接收数据,防止继续占用资源。IO 流的类如果不关闭则会一直占用资源。
    		
    		Scanner scanner = new Scanner(System.in);	//创建一个扫描器对象用于接收数据
    		System.out.println("使用 nextline 方式接收:");	
    		
    		//判断用户有没有输入字符
    		if (scanner.hasNextLine()){
    			String str = scanner.nextLine();
    			System.out.println("输出内容为:"+str);//如果输入 hello world!,那么会输出 hello world!
    		}
    		
    		scanner.close();	
    	}
    }
    
    • next():
      • 一定要读取到有效字符后才可以结束输入
      • 对输入有效字符之前遇到的空白,next()方法会自动将其去掉
      • 只有输入有效字符之后才将其后面输入的空白作为分隔符或者结束符
      • next()不能得到带有空格的字符串
    • nextLine():
      • 以 enter 为结束符,也就是说 nextLine 会读取输入 enter 前的所有字符。
      • 可以获取空白
  • 通过 scanner 获取字符串或者整数:

    import java.util.Scanner;
    public clss Test{
    	public static void main(String[] args){
    		//接收字符串
    		Scanner scanner = new Scanner(System.in);
    		System.out.println("请输入数据:");
    		String str = scanner.nextLine();
    		System.out.println("输入内容为:"+str);
    		scanner.close()
    		
    		//接收整数
    		Scanner scanner = new Scanner(System.in);
    		int i = 0;
    		System.out.println("请输入整数:");
    		//如果..那么..
    		if(scanner.hasNextInt()){		//if()括号里面默认判断 scanner.hasNextLine == True
    			i = scanner.nextInt();
    			System.out.println("整数数据:"+i);
    		}else{
    			System.out.println("请输入正确的整数!");
    		}
    	}
    }
    
  • 通过 scanner 获取多个数字并求值

    public class Test{
    	public static void main(String[] args){
    		Scanner scanner = new Scanner(System.in);
    		double sum = 0; //求和
    		int m = 0;			//计算输入多少个数字
    		
    		while (scanner.hasNextDouble()){
    			double x = scanner.nextDouble();
    			m = m + 1;
    			sum = sum + x;
    			System.out.println("你输入了第"+m+"个数据,当前和结果sum="+sum);
    		}
    		System.out.println(m+"个数的和为"+sum);
    		System.out.println(m+"个数的平均值为"+(sum/m));
    	}
    }
    

顺序结构

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

选择结构

  • if 单选择结构

    语法:

    if(布尔表达式){
    	//如果布尔表达式为 true 则执行的操作
    }
    
  • if 双选择结构

    语法:

    if(布尔表达式){
    	//如果布尔表达式为 true 执行的操作
    }else{
    	//如果布尔表达式为 false 执行的操作
    }
    
  • if 多选择结构

    if(布尔表达式1){
    	//符合布尔表达式 1 执行的操作
    }else if(布尔表达式 2){
    	//符合布尔表达式 2 执行的操作
    }else{
    	//如果不符合以上所有布尔表达式执行的操作
    }
    
  • 嵌套的 if 结构

    使用嵌套的 if...else 语句是合法的。也就是说可以在另一个 if 或者 else if 语句中使用 if 或者 else if 语句,可以像 if 语句一样嵌套 else if...else。

    语法:

    if(布尔表达式 1){
    	//如果布尔表达式 1 为 true 执行代码
    	if(布尔表达式 2){
    		//如果布尔表达式 2 为 true 执行代码
    	}
    }
    
  • switch 多选择结构

    • switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。

    • switch 语句中变量类型可以是 byte、short、int、char,从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量。

    • 语法:

      switch(expression){
      	case value :
      		//语句
      		break;	//可选
      	//可以添加任意数量的 case 语句
      	case value :
      		//语句
      		break;	//可选
      	default :	//可选
      		//语句
      }
      
    • case 穿透现象:如果没有 break,那么一旦匹配则会一直执行之后的操作命令

循环结构

  • while 循环

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

      while(布尔表达式){
      	//循环内容
      }
      
    • 只要布尔表达式为 true,循环就是一直执行下去,根据实际需要是否加上结束循环的语句

    • 死循环:指循环条件一直为 true,造成无限循环

  • do...while循环

    • 与 while 循环相比,do while 则是先则行 do 操作,之后再进行 while 循环操作,也就是说即使不满足 while 循环条件,也会至少执行一次操作。如果 while 的条件为 true 则会循环执行 do 操作的命令

    • 语法:

      do{
      	//代码语句
      }while(布尔表达式);
      
  • for 循环

    • for 循环是最有效、最灵活的循环结构。

    • for 循环执行的次数,在最开始就已经确定好了,语法结构为:

      for(初始化;布尔表达式;更新){
      //代码语句
      }
      
  • 增强 for 循环

    • Java5引入的一种主要用于数组或集合的增强型 for 循环

    • 语法:

      for(声明语句 : 表达式)
      {
      	//代码语句
      }
      
      //举例
      public class Test{
      	public static void main(String[] args){
      		int[] numbers = {10,20,30,40,50};	//定义一个数组
      		//遍历数组的元素
      		for (int x : numbers){
      			System.out.println(x);
      		}
      		
      		//也可以用以下方法遍历元素
      		for (int i = 0;i<5;i++){
      			System.out.println(numbers[i]);
      		}
      	}
      }
      
    • 声明语句:声明新的局部变量,该变量类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。

    • 表达式:表达式是要访问的数组名,或者是返回值为数组的方法。

  • break、continue、goto

    • break:强制退出循环,不执行循环中的剩余语句(在 switch 语句中使用)
    • continue:终止某次循环过程,不执行剩余尚未执行的语句,之后进行下次是否循环的判定
    • goto:是一个 Java 的关键字,但是并未在语言中得到正式使用。