05java流程控制

用户交互Scanner

Java.util.Scanner 是java5的新特征,可通过Scanner类来获取用户的输入

基本语法


Scanner s =new Scanner (System.in);


通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前需要使用hasNext()有空格就不往下读了

与hasNextLine()判断是否还有输入往下读完判断是否还有输入数据,

import java.util.Scanner;

public class Dome01 {
    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();
    }
}

next()

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

nextLine()

  1. 以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符。
  2. 可以获得空白
import java.util.Scanner;

public class Demo02 {
    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();
    }
}

顺序结构

  1. java的基本结构就是顺序结构,除非特别指明,否则就按照一句一句执行
  2. 顺序机构是最简单的算法结构

顺序结构

  1. 语句与语句之间,框与框之间是按从上到下的顺序进行的,由若干个依次执行的处理步骤组成,他是任何一个算法都离不开的基本算法结构

选择结构

if单选择结构
  1. 判断一个东西是否可行,然后才去执行,

  2. 语法

    if(布尔表达式){

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

    }

import java.util.Scanner;

public class Demo03 {
    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();
    }
}
if双选结构
  1. 语法

    if(布尔表达式){

    //如果布尔表达式的值为true

    }else{

    //如果不二表达式的值为false

    }

双选结构

public class Demo03 {
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入内容");
        int s = scanner.nextInt();
        if(s>60) {
            System.out.println(s);
        }else{
        System.out.println("End");}
        scanner.close();
    }
}
if多选择机构
  1. 语法

    if(){

    }else if(){

    }else if(){

    }…

    {

    }else

public class Demo03 {
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入内容");
        int s = scanner.nextInt();
        if(s>80) {
            System.out.println(s);
        }else if(s>60&&s<80){//不严谨
        System.out.println("及格");}
        else{
            System.out.println("不及格");
        }
        scanner.close();
    }
}
if嵌套语句

语法

if(){

if(){

}

}

public class Demo03 {
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入内容");
        int s = scanner.nextInt();
        if(s<80) {
            if (s > 60) {
                System.out.println("及格");
            }
            System.out.println("不及格"+s);
        }
        scanner.close();
    }
}
switch多选择结构
  1. 多选择结构 switch case

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

  3. switch语句中的变量类型可以是(byet ,short ,int,char,string)

  4. 语法

    switch (expressio){

    ​ case value1:

    ​ 语句1

    ​ break;

    ​ case value2

    ​ 语句2

    ​ break;

    ​ default;

    ​ 语句n

    }

    public class Demo04 {
        public static void main(String[] args) {
            String grade="c";
            //case具有穿透性
            switch (grade){
                case "a":
                    System.out.println("1");
                    break;
                case "b":
                    System.out.println("2");
                    break;
                case "c":
                    System.out.println("3");
                    break;
    
                default:
                    System.out.println("4");
            }
        }
    }
    

String是jdk7才能用的

但是字符的本质还是数字

//反编译 java—class()

public class Demo04 {
    public Demo04() {
    }
//反编译,对比上面出现了好多东东哦
    public static void main(String[] args) {
        String grade = "猫";
        byte var3 = -1;
        switch(grade.hashCode()) {//每个字都有一个hashCode,通过hashCode对比来判断是否相同
        case 21862:
            if (grade.equals("啦")) {
                var3 = 0;
            }
            break;
        case 22815:
            if (grade.equals("够")) {
                var3 = 1;
            }
            break;
        case 29483:
            if (grade.equals("猫")) {
                var3 = 2;
            }
        }

        switch(var3) {
        case 0:
            System.out.println("为i");
            break;
        case 1:
            System.out.println("反扑");
            break;
        case 2:
            System.out.println("猫");
            break;
        default:
            System.out.println("4");
        }

    }
}

循环结构

while循环
  1. 结构

    while(布尔表达式){

    //循环内容

    }

  2. 只要表达式为ture,循环会一直执行

  3. 大多数情况是想让循环停下来

  4. 少部分需要一直执行,如服务器的请求响应

  5. 循环条件一直为ture会造成无限循环(死循环)

  6. 例题,计算1+2+3+…100=

public class Dome01 {
    public static void main(String[] args){
        int i=0;
        int a;
        a=0;

        while (i<100){
            i++;
            System.out.println(i);
            a=a+i;
            System.out.println(a);
        }
    }
}
do…while循环
  1. 至少执行一次

  2. 语法

    do{

    }while(布尔);

While和do-while的区别
  1. while先判断后执行,do while 是先执行后判断
  2. do while 保证循环体至少被执行一次
public class Dome02 {
    public static void main(String[] args) {
        int i=0;
        int sum=0;
        do {
            i++;
            System.out.println(i);
            sum=sum+i;
            System.out.println(sum);
        }while (i<=99);//i<100都可
    }
}

for循环

重要

  1. 虽然所有的循环都可以使用while和do-while表示,但是还提供了for循环,使结构变得更简单
  2. for循环语句是支持迭代的一种通用结构,最有效,最灵活的循环结构
  3. for循环执行的次数是在执行前就确实的
  4. 语法

for(初始化;布尔表达式;更新){

//代码

}

  • 计算0到100之间的奇数和偶数的和

    //偶数
    public class Demo03 {
        public static void main(String[] args) {
            int sum;
            sum=0;
            for (int i=0;i<100;i=i+2){
                System.out.println(i);
                sum=sum+i;
                System.out.println(sum);
            }
        }
    }
    
    //奇数
    public class Demo03 {
        public static void main(String[] args) {
            int sum;
            sum=0;
            for (int i=1;i<100;i=i+2){
                System.out.println(i);
                sum=sum+i;
                System.out.println(sum);
            }
        }
    }
    
  • 用while或for循环输出1-1000之间能被3整除的数,每行三个

    public class Demo03 {
        public static void main(String[] args) {
            int sum;
            sum=0;
            for (int i=0;i<1000;i++){
                if(i%5==0) {
                    System.out.print(i+" ");
                }
                if(i%(5*3)==0){
                    System.out.print("\n");
                }
            }
        }
    }
    
  • 九九乘法表

public class Dome04 {
    public static void main(String[] args) {
        for (int j = 1; j <= 9; j++) {
            for (int i = 1; i <= j; i++) {
            System.out.print(j+"*"+i+"="+j*i+"\t");
        }
            System.out.println();
        }
    }
}
在java5中引入了一种主要用于数组的增强型for循环
  1. 语法

    for(声明语句:表达式){

    //代码语句

    }

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

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

public class Demo05 {
    public static void main(String[] args) {
        int[] n = {1, 2, 3, 4, 5, 6, 7};
        //遍历数组
       for (int x : n) {
            System.out.println(x);
        }
        for (int i=0;i<n.length;i++){
            System.out.println(n[i]);
        }
    }
}

break continue

一、break和continue的作用
  break和continue都是用来控制循环结构的,主要作用是停止循环。

二、break和continue的区别
1、break用于跳出一个循环体或者完全结束一个循环,不仅可以结束其所在的循环,还可结束其外层循环。

注意:
(1)只能在循环体内和switch语句体内使用break。
(2)不管是哪种循环,一旦在循环体中遇到break,系统将完全结束循环,开始执行循环之后的代码。
(3)当break出现在循环体中的switch语句体内时,起作用只是跳出该switch语句体,并不能终止循环体的执行。若想强行终止循环体的执行,可以在循环体中,但并不在switch语句中设置break语句,满足某种条件则跳出本层循环体。

2、continue语句的作用是跳过本次循环体中剩下尚未执行的语句,立即进行下一次的循环条件判定,可以理解为只是中止(跳过)本次循环,接着开始下一次循环。

注意:
(1)continue语句并没有使整个循环终止。
(2)continue 只能在循环语句中使用,即只能在 for、while 和 do…while 语句中使用。

三、案例分析
案例一

public class Demo05 {
    public static void main(String[] args) {
        for(int i=0; i<12; i++){
            if(i==5){
                break;
            }
            System.out.print(i+" ");
        }
    }
}
运行结果:
0 1 2 3 4
程序分析:
①程序输出了01234 到5的时候跳出了循环。
②break语句导致程序终止包含它的循环,并进行程序的下一阶段(整个循环后面的语句),即:不是跳到下一个循环周期而是退出循环。如果break语句包含在嵌套循环里,它只跳出最里面的循环。

案例二

public class Demo05 {
    public static void main(String[] args) {
        for(int i=0; i<12; i++){
            if(i==5){
                continue;
            }
            System.out.print(i+" ");
        }
    }
}
运行结果:
0 1 2 3 4 6 7 8 9 10 11
程序分析:
①可以看到只有5没有输出,也即当i=5时没有执行打印操作,直接到下一次循环。
②循环语句里有continue语句时,程序运行到此语句时,不在执行循环体里continue后面的语句而是跳到下一个循环入口处执行下一个循环。

关于goto

goto关键字,用来改变函数内代码的执行顺序,跳转到函数内指定的标签地方运行,goto不能跨函数代码块跳转。java无goto

练习

打印三角

public class Triangle {
    public static void main(String[] args) {
        for (int i = 1; i <= 5; i++) {
            for (int i1 = 5; i1 >= i; i1--) {
                System.out.print(" ");
            }
            for (int i1=1;i1<=i;i1++){
                System.out.print("*");
            }
            for (int i1=1;i1<i;i1++){
                System.out.print("*");
            }
            System.out.println();
        }
    }
}
 *
***



笑死,这个MarkDowm把我的*号直接给翻成线了

块跳转。java无goto

练习

打印三角

public class Triangle {
    public static void main(String[] args) {
        for (int i = 1; i <= 5; i++) {
            for (int i1 = 5; i1 >= i; i1--) {
                System.out.print(" ");
            }
            for (int i1=1;i1<=i;i1++){
                System.out.print("*");
            }
            for (int i1=1;i1<i;i1++){
                System.out.print("*");
            }
            System.out.println();
        }
    }
}
 *
***



笑死,这个MarkDowm把我的*号直接给翻成线了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值