Java基础笔记6(Scanner、程序结构)

Scanner对象

  • java.util.Scanner是Java5的新特征,可以通过Scanner类来获取用户的输入

  • 基本语法

    1
    Scanner scan = new Scanner(System.in);
  • 通过Scanner类的next()与nextLine()方法获取输入的字符串

    1
    2
    String s1 = scanner.next();		//输入:hello world
    System.out.println(s1); //输出:hello
    1
    2
    String s2 = scanner.nextLine();	//输入:hello world
    System.out.println(s1); //输出:hello world
    • next
      1. 读取到有效字符后才可以结束输入
      2. 对输入的有效字符之前遇到的空白,next()方法会将其自动过滤掉
      3. 只有输入有效字符后才将后面输入的空白作为分隔符或结束符
      4. next()不能得到带有空格的字符串
    • nextLine()
      1. 以Enter为结束符,nextLine()方法返回输入回车之前的所有字符
      2. 可以获得带空格的字符串
  • 在读取前一般使用hasNext()与hasNextLine()判断是否还有输入的数据

    1
    2
    3
    4
    5
    while(scanner.hasNextInt()){
    System.out.print(scanner.nextInt()+" ");
    }
    //输入:1 2 3 4 5 a b 6 c
    //输出:1 2 3 4 5
  • 属于IO流的类不关闭会一直占用资源,用完就关掉

    1
    scan.close();

顺序结构

语句与语句之间从上到下顺序执行

选择结构

if单选择结构

1
2
3
if(条件){
语句
}

if-else双选择结构

1
2
3
4
5
if(条件){
语句1
}else{
语句2
}

if多选择结构

1
2
3
4
5
6
7
8
9
if(条件1){
语句1
}else if(条件2){
语句2
}else if(条件3){
语句3
}else{
语句4
}

if嵌套

1
2
3
4
5
if(条件1){
if(条件2){
语句
}
}

switch多选择结构

  • switch case判断一个变量与一系列值中某个值是否相等,每一个值是一个分支
  • switch语句变量类型
    • byte、short、int、char
    • 从Java SE 7开始支持String
      • 判断String时,通过String的哈希值来判断
    • case标签必须为字符串常量或字面量
  • case穿透
    • 如果不加break,执行完当前分支语句后,会停止判断,继续执行剩下每个分支的语句
1
2
3
4
5
6
7
8
9
10
switch(expression){
case value1 :
语句1
break;
case value2 :
语句2
break;
default :
语句3
}

循环结构

while循环

1
2
3
while(布尔表达式){
循环语句
}
  • 只要条件为true,循环就会一直执行

  • 一般我们需要在循环语句中,改变布尔表达式使其失效,使循环停下来

  • 少部分情况需要循环一直执行,如服务器的请求响应监听

do while循环

1
2
3
do{
循环语句
}while(布尔表达式)
  • do while循环至少执行一次
  • while先判断后执行,do while先执行后判断

for循环

1
2
3
for(初始化;布尔表达式;更新){
循环语句
}
  • for循环执行次数在执行前就可以确认

  • 初始化只进行一次,只能声明一种类型,可以初始化多个循环控制变量,也可以是空语句

  • 每次循环中各部分执行顺序,布尔表达式 -> 循环语句 -> 更新

for each

1
2
3
4
5
6
int[] nums = {1,3,6,8,23};
//遍历数组中的元素
for (int num : nums) {
System.out.print(num+" ");
}
//输出:1 3 6 8 23

break continue

  • break用于强行退出循环,不执行循环中剩余的语句
  • continue在循环语句中用于终止某次循环,即跳过循环体中尚未执行的语句,接着进行下一次循环判定
  • (不建议使用)break 和 continue可以加标签
1
2
3
4
5
6
7
8
9
label: for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if(j==i){
continue label
}
System.out.print(j);
}
}
//输出:001
1
2
3
4
5
6
7
8
9
10
11
label: for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
for (int k = 0; k < 3; k++) {
if(k==1){
break label;
}
System.out.println(i);
}
}
}
//输出:0