> 文档中心 > 狂神JAVASE系列-流程控制篇

狂神JAVASE系列-流程控制篇


1. 用户交互Scanner

1.1 Scanner对象:

  •    Java提供的一个工具类,利用Scanner类可以获取用户的输入。
  •     java.util.Scanner是java5新特性

1.2 基本语法

 Scanner scanner     = new Scanner(System.in);  类     对象名(随便)
Scanner scanner = new Scanner(System.in);......scanner.close();

1.3 注意

        通过Scanner类的next()和nextLine()方法获取输入的字符串,在读取前通常会使用hashNext()与hashNextLine()判断是否还有输入的数据

示例:

package Lckz;import java.util.Scanner;public class Demon01 {    public static void main(String[] args) { //创建一个扫描器对象 用于接收键盘输入 Scanner scanner = new Scanner(System.in); System.out.println("使用next方式接收:"); //判断用户是否输入字符串 if(scanner.hasNext()){     //使用next方式接收     String str = scanner.next(); //程序会等待用户输入完毕     System.out.println("输出的内容为: "+str); } //凡是属于IO流的类一定要记得关流操作 //如果不关闭就会一直占用资源,要养成好的习惯用完就直接关掉 scanner.close();    }}
package Lckz;import java.util.Scanner;public class Demon02 {    public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("使用nextLine方式接收: "); if(scanner.hasNextLine()){     String str = scanner.nextLine();     System.out.println("输出的内容为: "); } scanner.close(); //关流操作    }}

 ====================================================================                             

                             next()方法和nextLine()方法对比:有什么区别?

总结如下:

        next():

  • 一定要读取到有效字符才可以结束输入。也就是必须的输入
  • 对输入有效字符之前遇到的空白,next()方法会自动将其去掉
  • 例如:Hello World 输出Hello
  • 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符
  • next()不能得到带有空格的字符串。空格之后的就直接删了

        nextLine()

  • 以Enter作为结束符,即:nextLine()方法返回的输入回车之前地 所有字符
  • 可以获得空白。

其他用法:

    scanner.nextInt()              scanner.nextFloat()

2. 顺序结构

       自从而下 太简单

3. 选择结构

   3.1 if单选结构  

语法:if(布尔表达式){    如果为真,执行的语句}

   代码示例:

        

package struct;import java.util.Scanner;public class ifDemon01 {    public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入内容"); String s = scanner.nextLine(); if (s.equals("hello")){     System.out.println(s); } System.out.println("End"); scanner.close();    }}

  3.2 if双选结构

if(布尔表达式){    语句A;  //布尔表达式的值为true}else{    语句B; //布尔表达式的值为false}

   代码示例:

package struct;import java.util.Scanner;public class ifDemon02 {    public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入成绩"); int score = scanner.nextInt(); if (score>60){     System.out.println("及格"); }else {     System.out.println("不及格"); } scanner.close();    }}

3.3 if多选择结构

语法:

if(布尔表达式1){    如果1为真,执行语句A}else if(布尔表达式2){    如果2为真,执行语句B}else if(布尔表达式3){    如果2为真,执行语句C}else{    上述都不满足  执行语句D}

代码示例:

package struct;import java.util.Scanner;public class ifDemon03 {    public static void main(String[] args) { Scanner scanner = new Scanner(System.in); /* if语句至多有一个else语句,且else语句在所有的else if语句之后 if语句可以有若干个else if语句,它们必须在else语句之前 一旦其中一个else if 检测为true,其他的else if 以及else语句都将跳过执行  */ System.out.println("输入您的成绩:"); int score = scanner.nextInt(); if (score==100){     System.out.println("恭喜满分"); }else  if(score=90){     System.out.println("A"); }else  if(score=80){     System.out.println("B"); }else  if(score=70){     System.out.println("C"); }else  if(score=60){     System.out.println("D"); }else{     System.out.println("不合格"); } scanner.close();    }}

    3.4 嵌套的if结构

语法:

if(布尔表达式1){    if(布尔表达式2){     }}

代码示例:寻找一个数,在1-100之间

     3.5 switch多选择结构

语法:

switch(expression){    case value1: 执行语句A break; //可选    case value2: 执行语句B break;    .....    default:  //可选 意思是可有可无 执行语句}

注意点:不写break,会出现case穿透

代码示例:     

package struct;public class switchDemon01 {    public static void main(String[] args) { char rank = 'A'; /* 不加break  会出现case穿透  优秀 良好 一般 就那样 呵呵  */      switch (rank){   case 'A':System.out.println("优秀");break;   case 'B':System.out.println("良好");break;   case 'C':System.out.println("一般");break;   case 'D':System.out.println("就那样");break;   case 'E':System.out.println("呵呵");break;      }    }}

switch总结

  • switch语句中的变量类型可以是,byte,short,int或者char
  • 从JAVASE 7开始,switch支持字符串String类型。
  • package struct;public class switchDemon02 {    public static void main(String[] args) {String name = "EZ";      //JDK7新特性,表达式的结果可以是字符串      //反编译 java---->class(字节码文件)---------->反编译 switch (name){     case "EZ":  System.out.println("adc");  break;     case "德玛":  System.out.println("上单");  break;     }    }}

    查看上面代码反编译后的结果

  • //// Source code recreated from a .class file by IntelliJ IDEA// (powered by FernFlower decompiler)//package struct;public class switchDemon02 {    public switchDemon02() {    }    public static void main(String[] var0) { String var1 = "EZ"; byte var3 = -1; switch(var1.hashCode()) { case 2229:     if (var1.equals("EZ")) {  var3 = 0;     }     break; case 23854855:     if (var1.equals("寰风帥")) {  var3 = 1;     } } switch(var3) { case 0:     System.out.println("adc");     break; case 1:     System.out.println("涓婂崟"); }    }}

4. 循环结构

        4.1 while循环

  •   小部分情况需要循环一直进行,例如服务器请求响应监听等,、
  • 除此之外,大多数情况是会让循环停下来的。
  • 输出1-100
    int i = 0;while(i<100){    i++;    system.out.println(i)}

    代码示例:1+2+3+...+100                

package struct;public class WhileDemon01 {    public static void main(String[] args) { int sum = 0; int i = 0; while (i<=100){     sum = sum + i;     i++; } System.out.println(sum);    }}

        4.2 do-while循环

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

        while vs do-while

         (1) while先判断后执行,do-while先执行后判断

        (2)由(1)可知,do-while至少会执行一次。

语法结构:

do{    执行语句    }while(布尔表达式);

    

package struct;public class WhileDemon01 {    public static void main(String[] args) { int sum = 0; int i = 0; do {     sum = sum + i;     i++; }while (i<=100); System.out.println(sum);    }}
public class WhileDemon01 {    public static void main(String[] args) { int a = 0; while (a10);    }}

4.3 for循环

语法:      

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

关于for循环的几点说明:

        最先执行初始化步骤,可以声明一种类型,但可以初始化一个或者多个循环控制变量,也可以是空语句。

        检测布尔表达式的值,如果结果为true,循环体被执行,否则被终止

        执行一次循环后,更新循环控制变量

for(;;i++){}///死循环for(;;;){}fori tab快捷

示例1:计算0-100之间的奇数和偶数的和

public class WhileDemon01 {    public static void main(String[] args) { //计算0-100之间的奇数和偶数的和 int NumJs = 0; int NumOs = 0; for(int i=0;i<=100;i++){     if (i%2==0){  NumOs += i; //偶数累加     }else {  NumJs += i; //奇数累加     } } System.out.println("奇数和偶数的和"+NumOs+NumJs);    }}

实例2:循环输出1-1000之间能被5整除的数,并且每行输出3个

public class WhileDemon02 {    public static void main(String[] args) { //循环输出1-1000之间能被5整除的数,并且每行输出3个 for (int i = 0; i < 1000; i++) {    if(i%5==0){ System.out.print(i+"\t");    }    if(i%(5*3)==0){ System.out.println("\n");    } } }    }/*注意:println:输出一个语句结束会自动换行输出,print在输出完一个语句时并不会自动换行。*/

示例3:   实现99乘法表

public class WhileDemon03 {    public static void main(String[] args){ /*      行变量走外循环;列变量走内循环  */ for(int i=1;i<=9;i++){     for(int j=1;j<=i;j++){  System.out.print(i+"*"+j+"="+i*j+"\t");     }     System.out.println(); }}}

4.4 增强型for循环(java5中引入一种主要用于数组的增强型for循环)

        语法格式

for(声明语句:表达式){    //执行语句}

        声明语句

                声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。

        表达式

                要访问的数组名或者是返回值为数组的方法。

public class ForDemon01 {    public static void main(String[] args) { int [] number = {10,20,30,40}; //增强型for循环 for(int x:number){      System.out.println(x); }    }}================================================public class ForDemon01 {    public static void main(String[] args) { int [] number = {10,20,30,40};//普通for循环  for(int i=0;i<5;i++){     System.out.println(number[i]; }    }}

5. break & continue

        break:用于强行退出循环,不执行循环中剩余的语句(break语句也在switch语句中使用)

        continue:用于终止某次循环过程。

        goto:尽管goto是java的一个保留字,但未在语言中正式使用,也就是java中没有goto

带有标签的break和continue

代码示例:  

public class BreakDemon01 {    public static void main(String[] args) { int i = 0; while(i<10){     i++;    if(i==8){//  break;//输出8以后就跳出循环了  不执行了  continue;//就跳出本次循环了  也就是输出8之前跳出去     } System.out.println(i); }    }}

6.代码实践练习

打印 三角形

public class PracticeDemon01 {    public static void main(String[] args) { //打印三角形 for (int i = 1; i =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();     /* ****      *****     *******    *********      */ }    }