狂神Java SE (四)流程控制

01 用户交互 Scanner

java.util.Scanner Java5的新特性,可以通过Scanner类获取用户的输入。

	Scanner s = new Scanner(System.in);
  • 通过Scanner类的next()nextLine()方法获取输入的字符串
  • 在读取之前一般需要使用hasNext()hasNextLine()判断是否还有输入的数据。
  • 属于IO流的类如果不关闭会一直占用资源,要在用完后及时关掉scanner.close()
  • next()
    • 要读取到有效字符后才能结束输入
    • 对输入有效字符之前遇到的空白,会自动将其去掉
    • 只有输入有效字符后才将其后面输入的空白作为分隔符或结束符
    • next() 不能得到带有空格的字符串
  • nextLine()
    • 以Enter作为结束符,返回的是输入回车之前的所有字符
    • 可以获得空白

02 Scanner 进阶使用

scanner 还有一些其他的方法可以判断输入的是否是特定格式的数据,如hasNextInt()hasNextFloat()等,然后使用对应的nextInt(), nextFloat()获取。

package com.kuang.base;  

import java.util.Scanner;  
  
/**  
 * 输入多个数字求和、求平均值,输入的数字用回车确认,输入非数字结束输入并输出结果。  
 *  
 * @author maple_w  
 * Created on 21/07/10 010 18:00 */
 public class Demo04_scanner_test {  
	 public static void main(String[] args) {  
		 Scanner scanner = new Scanner(System.in);  

		 double sum = 0;  
		 int num = 0;  

		 // 通过循环判断是否还有输入,并在循环中对每次输入进行求和、统计  
		 while (scanner.hasNextDouble()) {  
			 double x = scanner.nextDouble();  
			 num++;  
			 sum = sum + x;  
			 System.out.println("输入了第" + num + "个数据,当前结果sum = " + sum);  
		 }  

		 System.out.println(num + "个数字的和为: " + sum);  
		 System.out.println(num + "个数字的平均值为: " + (sum / num));  

		 scanner.close();  
	 }  
}

03 顺序结构

  • Java基本结构,如无特殊指明,按照顺序一句一句执行。
  • 是任何一个算法都离不开的一种基本算法结构。

04 if 选择结构

  • if 单选择结构
  • if 双选择结构
  • if 多选择结构 if(){} else if(){} else{}
  • 嵌套的 if 结构

05 switch 选择结构

  • switch case default 语句判断一个变量与一系列值中某个值是否相等,每个值成为一个分支。
  • switch 语句中的变量类型可以是:
    • byte、short、 int、 char
    • String类型 (Java 7开始支持)
      case标签必须为字符串常量或字面量。
      通过反编译可以看到,case比较的是字符串的hashCode()
  • 注意 case 穿透问题(break的使用)
package com.kuang.base;  
  
/**  
 * JDK7中新增switch判断string特性  
 *  
 * @author maple_w  
 * Created on 21/07/10 010 18:23 */
 public class Demo06_switch {  
	 public static void main(String[] args) {  
		 String flag = "hello";  

		 switch (flag){  
			 case "hello":  
			 	System.out.println("hello");  
			 	break;  
			 case "world":  
			 	System.out.println("world");  
			 	break;  
			 default:  
			 	System.out.println("error");  
		 }  
	 }
 }

反编译class文件:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.kuang.base;

public class Demo06_switch {
    public Demo06_switch() {
    }

    public static void main(String[] args) {
        String flag = "hello";
        byte var3 = -1;
        switch(flag.hashCode()) {
        case 99162322:
            if (flag.equals("hello")) {
                var3 = 0;
            }
            break;
        case 113318802:
            if (flag.equals("world")) {
                var3 = 1;
            }
        }

        switch(var3) {
        case 0:
            System.out.println("hello");
            break;
        case 1:
            System.out.println("world");
            break;
        default:
            System.out.println("error");
        }

    }
}

06 while 循环详解

	while(布尔表达式){
		// 循环内容
	}
  • 只要布尔表达式为true,循环就会一直执行下去
  • 少数情况需要循环一直执行,如服务器的请求响应监听等

07 do while 循环

	do {
		// 代码语句
	} while(布尔表达式);
  • do while循环至少会执行一次
  • do while先执行,后判断

08 for 循环详解

	for (初始化; 布尔表达式; 更新){
		// 代码语句
	}
  • for循环是支持迭代的一种通用结构,是最有效、最灵活的循环结构
  • for循环执行的次数在执行前就已经确定了

09 打印九九乘法表

package com.kuang.base;

/**
 * 使用for循环打印九九乘法表
 * 1*1=1
 * 2*1=2	2*2=4
 * 3*1=3	3*2=6	3*3=9
 * 4*1=4	4*2=8	4*3=12	4*4=16
 * 5*1=5	5*2=10	5*3=15	5*4=20	5*5=25
 * 6*1=6	6*2=12	6*3=18	6*4=24	6*5=30	6*6=36
 * 7*1=7	7*2=14	7*3=21	7*4=28	7*5=35	7*6=42	7*7=49
 * 8*1=8	8*2=16	8*3=24	8*4=32	8*5=40	8*6=48	8*7=56	8*8=64
 * 9*1=9	9*2=18	9*3=27	9*4=36	9*5=45	9*6=54	9*7=63	9*8=72	9*9=81	
 *
 * @author maple_w
 * Created on 21/07/10 010 21:23
 */
public class Demo08_for {
    public static void main(String[] args) {
        for (int i = 1; i < 10; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(i + "*" + j + "=" + i * j + "\t");
            }
            System.out.println();
        }
    }
}

10 增强 for 循环

  • Java5 引入的用于数组或集合的增强for循环
for (声明语句 : 表达式){
	// 代码语句
}
  • 声明语句:声明新的局部变量,该变量的类型必须与数组元素的类型匹配。其作用域限定在循环语句块,其值与此事数组元素的值相等。
  • 表达式:要访问的数组名,或返回值为数组的方法。

11 break、continue、goto

  • break在任何循环语句的主体部分,均可以控制循环流程。用于强行退出循环,不执行循环中剩余的语句(也可以在switch语句中使用)。
  • continue语句在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,截止进行下一次是否执行循环的判定。
  • goto 是保留字,但并未正式使用。称为标签,表示为 标签名:

12 打印三角形及debug

package com.kuang.base;

/**
 * 打印三角形
 *
 * @author maple_w
 * Created on 21/07/10 010 21:51
 */
public class Demo09_printTriangle {
    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();
        }
    }
}

上一篇:PHP大文件上传进度条插件


下一篇:Java大文件分片上传/多线程上传实例