Java流程控制

Java流程控制

用户交互Scanner

Scanner 对象

介绍

Java给我们提供了一个工具类,我们可以通过它获取用户的输入,java.util.Scanner是Java 5 的新特性,我们可以通过这个类进行获取用户的输入

基本语法
Scanner s = new Scanner(System.in);

通过Scanner类的next()nextLine()方法发货区输入的字符串,在读取前我们一般需要使用hasNext()hasNextLine()判断是否还有输入的数据。

package com.zy.scanner;

import java.util.Scanner;
public class Demo() {
	public static void main(String[] args) {
		//创建一个扫描器对象,用来接受键盘数据
		Scanner scanner = new Scanner(System.in);
		
		System.out.print("使用next方式接收:");
		//判断用户是否输入字符串
		if(scanner.hasNext()) {
			//使用next()方法进行接收
			String str = scanner.next();
			System.out.print("输入的内容为:" + str);
			}
			scanner.close();   //很重要很重要
		}
	}

这里使用next()进行接收的话,比如我输出hello world时,程序的运行结果是hello,而不是hello world,说明这个方法只能接收我这里空格前的hello,如果要把hello world全部接收需要使用nextLine()方法才可以实现。

注意:要养成良好的习惯,在用完IO流的类时一定要用close()方法关掉,否则会一直占用资源

这里讲解一下这两个方法的区别:
next():

  • 一定要读取到有效的字符后才可以结束输入
  • 对输入有效之前遇到的空白,next()方法会自动去掉
  • 只能输入有效字符后才将其后面输入的空白作为分隔符或者结束符
  • next()不能得到带有空格的字符串

这就是为什么上面的程序只能读到hello的原因

nextLine():

  • 以Enter(回车键)作为结束符,所以nextLine()方法返回的是输入回车之前的所有字符
  • 可以得到空白的内容
package com.zy.scanner;

import java.util.Scanner;
public class Demo() {
	public static void main(String[] args) {
		//创建一个扫描器对象,用来接受键盘数据
		Scanner scanner = new Scanner(System.in);
		
		System.out.print("请输入数据:");
		
		String str = scanner.nextLine();
		
		System.out.print("输入的内容为:" + str);

		scanner.close();   //很重要很重要很重要很重要很重要很重要很重要很重要
		}
	}

上面讲述的都是String(字符)类型的输入,我们来讲一下数值类型的输入该怎么使用

package com.zy.scanner;

import java.util.Scanner;
public class Demo() {
	public static void main(String[] args) {
		//创建一个扫描器对象,用来接受键盘数据
		Scanner scanner = new Scanner(System.in);
		
		int i = 0;
		
		System.out.print("请输入整数:");
		
		//如果输入的是整数,则进行赋值并输出
		if(scanner.hasNextInt()) {
			i = scanner.nextInt();
			System.out.print("输入的内容为:" + i);
		} 
		scanner.close();   //很重要很重要很重要很重要很重要很重要很重要很重要
		}
	}

我们这里使用hasNextInt()去判断我们输入的是否为整数,并使用nextInt()方法进行数据的接收
还有很多种方法去接收不同的数据如

scanner.nextLong();
scanner.nextShort();
scanner.nextDouble();
scanner.nextByte();
scanner,nextFloat();
scanner.nextBigInteger();
scanner.nextBoolean();
...........

我们可以使用判断数据方法和接收方法去实现各种功能

顺序结构

  • Java的基本结构就是顺序结构,除非特别指明,否则都是按顺序执行
  • 顺序结构也是最简单的算法结构
  • 它是由若干个依次执行的处理步骤组成的,任何一个算法都离不开顺序结构
package com.zy.scanner;

import java.util.Scanner;
public class Demo() {
	public static void main(String[] args) {
		System.out.print("1");
		System.out.print("2");
		System.out.print("3");
		System.out.print("4");
		System.out.print("5");
		}
	}

上面的程序会按照顺序执行,所以结果是12345
难点都是在后面的选择结构和循环结构,而且顺序结构我也感觉没什么好讲的,就是根据语句的顺序去执行,所以直接进入下一个内容

选择结构

if 单分支结构

很多情况下我们需要去判断某个条件是否为真,然后才选择是否执行语句,所以我们可以使用if语句来进行判断

  • 语句
if(布尔表达式) {
	//结果为true则执行if里面的语句
}

用实例来讲解一下

package com.zy.scanner;

import java.util.Scanner;
public class Demo() {
	public static void main(String[] args) {
		//创建一个扫描器对象,用来接受键盘数据
		Scanner scanner = new Scanner(System.in);
		
		int i = 0;
		
		System.out.print("请输入整数:");
		
		//如果输入的是整数,则进行赋值并输出
		if(scanner.hasNextInt()) {
			i = scanner.nextInt();
			System.out.print("输入的内容为:" + i);
		} 
		scanner.close();   //很重要很重要很重要很重要很重要很重要很重要很重要
		}
	}

这个是我们前面用到的代码,可以看到我们在输入之前判断了用户是否输入了字符串,这里的布尔表达式就是scanner.hasNextInt()这个方法的返回值是布尔类型,也就是真与假,刚开始学习不太熟练的话可以写成scanner.hasNextInt()==true,或者你想实现输入的不是整数才进行接受数据可以写成scanner.hasNextInt()!=true或者scanner.hasNextInt()==false都是可以的。

if 双分支结构

很多情况下我们需要去判断某个条件是否为真,然后才选择是否执行语句,否则我们将执行另一个语句

  • 语法
if(布尔表达式) {
	//结果为true则执行if里面的语句
} else {
		//结果为false则执行else里面的语句
}

举一个贴近生活的例子

package com.zy.scanner;

import java.util.Scanner;
public class Demo() {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.print("请输入天气:");
		String weather = scanner.hasNext();
		//equals方法用于比较两个字符串是否相等
		if(weather.equals("晴天") {
			System.out.print("出去打球");
		} else {
			System.out.print("在家睡大觉");
		}
		scanner.close();   //很重要很重要很重要很重要很重要很重要很重要很重要
		}
	}

可以看到,如果我们输入的是晴天,程序就会输出 出去打球 ,输入其他的则会输出 在家睡大觉,用于判断两种情况的选择,主要是考虑 if 里面的条件,其余条件都不用考虑,直接交给 else 去执行

if 多分支结构

当我们遇到需要考虑的条件比较多的时候,就可以用到多分支结构
还是刚刚的例子,但是我们修改一下

package com.zy.scanner;

import java.util.Scanner;
public class Demo() {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.print("请输入天气:");
		String weather = scanner.hasNext();
		//equals方法用于比较两个字符串是否相等
		if(weather.equals("晴天") {
			System.out.print("出去打球");
		} else if(weather.equals("雨天"){
			System.out.print("在家睡大觉");
		} else if(weather.equals("台风") {
			System.out.prin("紧锁并加固门窗");
		} else {
			System.out.print("看书");	
		}
			
		scanner.close();   //很重要很重要很重要很重要很重要很重要很重要很重要
		}
	}

这里我们通过多分支语句结构去实现了更多的选择,比如晴天、雨天、台风以及其他天气

嵌套if结构

有些时候我们需要多重判断,要进行多次判断才能得到想要的结果,那应该怎么去实现呢?
可以使用嵌套的if语句去帮我们进行判断

package com.zy.scanner;

import java.util.Scanner;
public class Demo() {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.print("请输入天气:");
		String weather = scanner.hasNext();
		System.out.print("请输入星期:");
		String week = scanner.hasNext();
		//equals方法用于比较两个字符串是否相等
		if(weather.equals("晴天") {
			if(week.equals("星期日") {
				System.out.print("出去打球");
			}
		} 
		//这里可以搭配else if 和 else 去使用,我比较懒,不想写太多
		scanner.close();   //很重要很重要很重要很重要很重要很重要很重要很重要
		}
	}

这个程序通过判断今天是晴天,并且是星期天的话就出去打球,嵌套if 语句可以多重嵌套,所以不止我这里写的两个,可以多个,不过最好还是别超过五个,也可以搭配else if 和 else 去实现更多更复杂的判断,这里根据自己的需要可以去尝试一下。

switch多选择结构

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

switch(expression){
    case value :
       //语句
       break; //可选
    case value :
       //语句
       break; //可选
    //你可以有任意数量的case语句
    default : //可选
       //语句
}
switch case 语句有如下规则:
  • switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量。

  • switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。

  • case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。

  • 当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。

  • 当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不必须要包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句。

  • switch 语句可以包含一个 default 分支,该分支一般是 switch 语句的最后一个分支(可以在任何位置,但建议在最后一个)。default 在没有 case 语句的值和变量值相等的时候执行。default 分支不需要 break 语句。

switch case 执行时,一定会先进行匹配,匹配成功返回当前 case 的值,再根据是否有 break,判断是否继续输出,或是跳出判断。

实例:

public class Test {
   public static void main(String args[]){
      char grade = 'D';
 
      switch(grade)
      {
         case 'A' :
            System.out.println("优秀"); 
            break;
         case 'B' :
         case 'C' :
            System.out.println("良好");
            break;
         case 'D' :
            System.out.println("及格");
            break;
         case 'F' :
            System.out.println("不及格");
            break;
         default :
            System.out.println("输入错误");
      }
      System.out.println("你的评分是 " + grade);
   }
}

输出结果:
及格
你的评分是 D
这里可以看到,如果grade是’A’的话,会输出优秀并且break,跳出switch语句,直接输出 你的评分是 A,如果是B的话,可以发现里面并没有语句,也没有break,所以它会执行C里面的语句并且break,说明B和C 都是属于良好,最后的default就是跟else差不多的作用,除了上面那几个选项外,其他输出都会被输出 输入错误

break这个语句在后面循环结构中会详细讲解,这里先简单带过,留个印象就行,知道它是跳出switch语句和循环的作用就可以了。

总结

这一篇的内容主要讲解了Scanner对象进行用户交互和三大结构中的顺序、选择结构,顺序是基本的,而选择和循环都是必不可少的,这三个结构组成了我们的编程世界,今后我们会一直用到选择和循环去帮我们实现很多功能,所以一定要学好这两个结构,顺序结构的话不用学也能明白的,因为就是按顺序去执行而已。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值