Java流程控制

用户交互Scanner

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

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

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

  • next()不能得到带有空格的字符串

package scanner;
​
import java.util.Scanner;
​
public class Demo01 {
    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);
        }
        //关闭scanner I/O 流
        scanner.close();
    }
}

  • nextLine可以获得空白的字符串

package scanner;
​
import java.util.Scanner;
​
public class Demo02 {
    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("输出的内容为:"+str);
        }
        scanner.close();
    }
}

package scanner;
​
import java.util.Scanner;
​
public class Demo02 {
    public static void main(String[] args) {
        //从键盘接收数据
        Scanner scanner = new Scanner(System.in);
        System.out.println("使用nextLine方式接收:");
        String str= scanner.nextLine();
        System.out.println("输出的内容为:"+str);
        scanner.close();
    }
}

scanner进阶版

package scanner;
​
import java.util.Scanner;
​
public class Demo03 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        //
        int i=0;
        float f=0.0f;
        System.out.println("请输入整数:");
        if (scanner.hasNextInt()){
            i=scanner.nextInt();;
            System.out.println("整数数据:"+i);
        }else {
            System.out.println("输入的不是整数数据");
        }
        System.out.println("请输入小数:");
        if (scanner.hasNextFloat()){
            f=scanner.nextFloat();
            System.out.println("小数数据:"+f);
        }else{
            System.out.println("输入的不是小数数据");
        }
        scanner.close();
    }
}

scanner实际应用

package scanner;
​
import java.util.Scanner;
​
public class Demo04 {
    public static void main(String[] args) {
        //我们可以输入多个数字,并求其总和与平均数,没输入一个数字回车确认,通过输入非数字来结束程序。
        Scanner scanner = new Scanner(System.in);
//定义变量和
        double sum=0;
        //定义输入的次数
        int m=0;
        System.out.println("请输入数据:");
        //通过循环判断是否还有输入,并在里面对每一次进行求和统计
        while (scanner.hasNextDouble()){
            double x = scanner.nextDouble();
            m=m+1;
            sum=sum+x;
            System.out.println("你输入了第"+m+"个数据,当前的总和为:"+sum);
            System.out.println("你输入了第"+m+"个数据,当前的平均值为:"+(sum/m));
        }
        System.out.println(m+"个数的和为"+sum);
        System.out.println(m+"个数的平均值为"+(sum/m));
        scanner.close();
    }
}

顺序结构

  • java的基本结构就是顺序结构,任何一个算法都离不开的一个基本算法结构

    package struct;
    ​
    public class Demo01 {
        public static void main(String[] args) {
            System.out.println("1");
            System.out.println("2");
            System.out.println("3");
            System.out.println("4");
            System.out.println("5");
        }
    }

选择结构

  • if单选泽结构

    语法: if(布尔表达式){

    //如果布尔表达式为true将执行的语句

    }

    package struct;
    ​
    import java.util.Scanner;
    ​
    public class Demo02 {
        public static void main(String[] args) {
            Scanner scanner=new Scanner(System.in);
            System.out.println("请输入语句:");
            String s=scanner.nextLine();
    ​
            //equals:判断字符串是否相等
            if(s.equals("hello")){
                System.out.println(s);
            }
                System.out.println("end");
                scanner.close();
        }
    }

  • if双选择结构

    语法:

    if(布尔表达式){

    //如果布尔表达式为true将执行的语句

    }else{

    //如果布尔表达式为false将执行的语句

    }

    package struct;
    ​
    import java.util.Scanner;
    ​
    public class Demo03 {
        public static void main(String[] args) {
            //考试分数>60是及格,<60是不及格。
            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();
        }
    }

  • if多选择结构

    语法:

    if(布尔表达式1){

    //如果布尔表达式1为true将执行的语句

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

    //如果布尔表达式2为true将执行的语句

    }else if(布尔表达式3){

    //如果布尔表达式3为true将执行的语句

    }else{

    //如果布尔表达式为true将执行的语句

    }

    package struct;
    ​
    import java.util.Scanner;
    ​
    public class Demo04 {
        public static void main(String[] args) {
            Scanner scanner=new Scanner(System.in);
            System.out.println("请输入成绩:");
            int score=scanner.nextInt();
            if(score==100){
                System.out.println("满分");
            }else if(score<100&&score>=90){
                System.out.println("优秀");
            }else if(score<90&&score>=70){
                System.out.println("良好");
            }else if(score<70&&score>=60){
                System.out.println("合格");
            }else if(score<60&&score>=0){
                System.out.println("不及格");
            }else {
                System.out.println("成绩不合法");
            }
            scanner.close();
        }
    }

  • 嵌套的if结构(二分查找法)

    语法: if(布尔表达式1){

    //如果布尔表达式1为true将执行的语句

    if(布尔表达式2){

    //如果布尔表达式2为true将执行的语句

    }

  • switch多选择结构

    1. 实现方式就是switch case 与语句

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

    3. 语法: switch(expression){

      case value:

      //语句

      break;//可选

      case value:

      //语句

      break;//可选

      //你可以有任意数量的case语句

      default://可选

      //语句

      }

    4. switch语句中的变量类型可以是:

      • byte、short、int、char、String

      • case标签必须为字符串常量或字面量

    package scanner;
    ​
    public class Demo6 {
        public static void main(String[] args) {
            //字符的本质还是数字
            //反编译 java--class(字节码文件)--反编译(ieda)
            String nmae="we";
            switch (nmae){
                case"we":
                    System.out.println("we");
                    break;
                case"bn":
                    System.out.println("bn");
                    break;
                default:
                    System.out.println("不符合要求");
    ​
            }
        }
    }

循环结构

  • while循环

    • 最基本的循环:

      while(布尔表达式){

      //循环内容

      }

    • 条件不满足,不能进入循环,先判断后执行

    • 只要布尔表达式TRUE,循环就会一直执行下去

    • 大多数情况会让循环停止下来,需要让一个表达式失效的方式来结束循环

    • 思考:计算1+2+3+4+...+100=?

package struct;

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

 

package struct;
​
public class WhileDemo01 {
    public static void main(String[] args) {
        //输出1~100
        int i=0;
        //i<100让循环终止的方式
        while(i<100){
            i++;
            System.out.print(i+"\t");
        }
    }
}

 

  • do...while循环

    • 语法: do{

      //代码语句

      }while(布尔表达式);

    • do...while循环至少会执行一次,先执行后判断。

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

  区别:

package struct;

public class WhileDemo04 {
    public static void main(String[] args) {
        int a=0;
        while (a<0){
            System.out.println(a);
            a++;
        }
        System.out.println("===================");
        do {
            System.out.println(a);
            a++;
        }while (a<0);
    }
}

 

  • for循环

    • 支持迭代的一种通用结构,最有效、最灵活的循环结构

    • 快捷键:数字.for

    • for循环执行的次数是在执行之前就确定的,语法: for(初始化;布尔表达式;更新){

      //代码语句

      }

      package struct;
      ​
      public class ForDemo01 {
          public static void main(String[] args) {
              int a=1;//初始化条件
              while (a<=100) {//条件判断
                  System.out.println(a);//循环体
                  a+= 2;//迭代
              }
              System.out.println("while循环结束");
              //初始化条件;//条件判断;//循环体
              for (int i=1;i<=100;i++){
                  System.out.println(i);
              }
              System.out.println("for循环结束");
          }
      }

 

  • 练习1:计算0-100之间奇数和偶数的和

package struct;
​
public class ForDemo02 {
    public static void main(String[] args) {
        //
        int oddSum=0;
        int evenSum=0;
        for (int i = 0; i <=100; i++) {
            if(i%2!=0){//奇数
                oddSum+=i;
            }else {//偶数
                evenSum+=i;
            }
        }
        System.out.println("奇数的和:"+oddSum);
        System.out.println("偶数的和:"+evenSum);
    }
}

 

  • 练习2:用while或者for循环输出1-100之间能被5整除的数,并且每行输出3个

package struct;
​
public class ForDemo03 {
    public static void main(String[] args) {
        for (int i = 1; i <=100; i++) {
            if (i%5==0){
                //\t相当于tab键
                System.out.print(i+"\t");
            }
            //每三个数换行
            if (i%(5*3)==0){
                //换行
                //System.out.println();
                System.out.print("\n");
            }
        }
        //printlin 输出完会换行
        //print 输出完不会换行
    }
}

 

  • 练习3:打印九九乘法表

package struct;
​
public class ForDemo04 {
    public static void main(String[] args) {
        for (int j = 1; j <=9; j++) {
            for (int i= 1; i<=j; i++){
                System.out.print(i+"*"+j+"="+(i*j)+"\t");
            }
            System.out.println();
        }
        System.out.println("===========");
        int m=1;
        int n=1;
        while(m<=9){
            n=1;
            while (n<=m){
                System.out.print(n+"*"+m+"="+(n*m)+"\t");
                n++;
            }
            System.out.println();
            m++;
        }
​
    }
}

 

  • 主要用于数组增强型for循环

    • 语法: for(声明语句:表达式)

      {

      //代码句子

      }

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

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

    package struct;
    ​
    public class ForDemo05 {
        public static void main(String[] args) {
            int[] numbers={1,2,3,4};
            for (int i=0;i<4;i++){
                System.out.println(numbers[i]);
            }
            System.out.println("==============================");
            //遍历数组元素
            for(int x:numbers){
                System.out.println(x);
            }
        }
    }

break&continue

  • break在任何循环语句的主体部分,均可用break控制循环流程

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

  • continue语句在循环语句中,用于终止某次循环过程,即跳过循环体中尚未执行得到语句,接着进行下一次是否执行循环的判断

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

 

continue:

package struct;
​
public class ContinueDemo01 {
    public static void main(String[] args) {
        int i=0;
        while (i<100){
            i++;
            if (i%10==0){
                System.out.println();
                continue;
            }
            System.out.print(i);
        }
    }
}

 

扩展 goto关键字(没有得到正式的使用)

package struct;
​
public class Goto {
    public static void main(String[] args) {
        //打印101-150之间所有质数
        int count=0;
        outer:for (int i=101;i<150;i++){
            for(int j=2;j<i/2;j++){
                if (i%j==0){
                 continue outer;
                }
            }
            System.out.println(i+" ");
        }
    }
}

 

流程控制练习

打印三角形:

package struct;
​
import java.util.Scanner;
​
public class TestDemo01 {
    public static void main(String[] args) {
        //打印三角形
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要打印的层数:");
        int n=scanner.nextInt();
        for (int i = 1; i <= n; i++) {
            for (int j = n; 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();
        }
​
    }
}

空心三角形:
 

package struct;

import java.util.Scanner;

public class TestDemo02 {
    public static void main(String[] args) {
        //空心三角形
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要打印的层数:");
        int n=scanner.nextInt();
        for (int i = 1; i <=n; i++) {//一共要打印的层数
            if(i==n){
                for (int m=1;m<=2*i-1;m++){
                    System.out.print("*");
                }
            }else {
                for (int j=1;j<=n-i;j++){//每层要打印的第一批空格数
                    System.out.print(" ");
                }
                System.out.print("*");
                for (int k=1;k<=2*i-3;k++){//每层要打印的第二批空格数
                    System.out.print(" ");
                }
                if (i!=1){
                    System.out.print("*");
                }
                System.out.println();
            }

        }

    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值