首页 > 编程语言 >05.Java流程控制

05.Java流程控制

时间:2023-01-16 23:23:47浏览次数:48  
标签:Java scanner 05 流程 System Scanner println public out

Java流程控制

用户交互Scanner

Java提供了一个工具类,可以获取用户的输入。Java.util.Scanner是Java5的新特征,我们可以通过Scanner类来获取用户的输入。

基本语法:

Scanner s = new Scanner(System.in);

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

next()方法

package com.allen.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);
        }

        //凡是属于IO流的类如果不关闭则会一直占用资源,要养成好习惯用完就关掉
        scanner.close();
    }
}

nextLine()方法

package com.allen.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 com.allen.scanner;

import java.util.Scanner;

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

    }
}
//在没有循环的时候没必要用if判断是否还有后续

二者区别:

next():

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

nextLine():

  • 以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符
  • 可以获得空白

输入整数和浮点数类型时:

package com.allen.scanner;

import java.util.Scanner;

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

案例使用:

要求可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果

package com.allen.scanner;

import java.util.Scanner;

public class Demo05 {
    public static void main(String[] args) {
      //要求可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果
        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入数据:");
        //和
        double sum = 0;
        //数字个数
        int m = 0;

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

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

        scanner.close();
    }
}

顺序结构

Java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行。

顺序结构是最简单的算法结构

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

package com.allen.struct;

public class ShunXuDemo01 {
    public static void main(String[] args) {
        //顺序结构
        System.out.println("hello0");
        System.out.println("hello1");
        System.out.println("hello2");
        System.out.println("hello3");
        System.out.println("hello4");
        System.out.println("hello5");
    }
}

选择结构

if单选择结构

package com.allen.struct;

import java.util.Scanner;

public class IfDemo01 {
    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双选择结构

一个公司收购一款软件,成功了,给人支付一百万,失败了,自己找人开发

package com.allen.struct;

import java.util.Scanner;

public class IfDemo02 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你要用多少万元收购:");
        int i = scanner.nextInt();

        if (i>=100){
            System.out.println("收购成功");
        }
        else{
            System.out.println("收购失败,准备自己开发");
        }
        scanner.close();
    }
}

if多选择结构

package com.allen.struct;

import java.util.Scanner;

public class IfDemo03 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入您的成绩:");
        int i = scanner.nextInt();

        if (i>=90){
            System.out.println("A");
        }
        else if (i>=80){
            System.out.println("B");
        }
        else if (i>=70){
            System.out.println("C");
        }
        else if (i>=60){
            System.out.println("D");
        }
        else if (i<60 && i>=0){
            System.out.println("E");
        }
        else {
            System.out.println("输入错误");
        }
        scanner.close();
    }
}

嵌套的if结构

switch多选择结构

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

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

  • byte、short、int或者char
  • 从Java7开始switch支持字符串string类型了
  • 同时case标签必须为字符串常量或字面量

case穿透:如果在case中没有break,则若匹配这个case在执行完这个case中的语句之后会把后面的其他case中的语句都执行

char grade = 'C';

        switch (grade){
            case 'A':
                System.out.println("优秀");
                break;
            case 'B':
                System.out.println("良好");
            case 'C':
                System.out.println("及格");
            case 'D':
                System.out.println("不及格");
            case 'E':
                System.out.println("差劲");
            default:
                System.out.println("未知等级");
        }

字符串比较

package com.allen.struct;
import java.util.Scanner;

public class SwitchDemo02 {
    public static void main(String[] args) {
        //String name = "魏博伦";

        //字符的本质还是数字
        //反编译 java编译成class文件(字节码文件),想要看懂要运用IDEA反编译成java文件

         Scanner scanner = new Scanner(System.in);
         System.out.println("请输入你的名字:");
         String name = scanner.nextLine();

        switch (name){
            case "孔子":
                System.out.println("孔子");
                break;
            case "老子":
                System.out.println("老子");
                break;
            case "阿伦":
                System.out.println("阿伦");
                break;
            default:
                System.out.println("不知所云");
        }
        scanner.close();

    }
}

循环结构

while循环

只要判断条件为true,循环就会一直执行下去

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

package com.allen.struct;

public class WhileDemo01 {
    public static void main(String[] args) {
        //计算1-100的加法
        int i = 0;
        int sum = 0;
        
        while(i<=100){
            sum+=i;
            i++;
        }
        System.out.println("1到100总和是:"+sum);
    }
}

do……while循环

while循环先判断后执行,do-while循环先执行后判断

do-while循环总保证循环体至少被执行依次

		int a = 0;
        int sum1 = 0;

        do {
            sum1+=a;
            a++;
        }while(a<=100);
        System.out.println("do-while循环中1到100总和是:"+sum1);

for循环

在IDEA中输入100.for可以自动生成一个for循环

计算0-100之间奇数和偶数的和

package com.allen.struct;

public class ForDemo01 {
    public static void main(String[] args) {
        //计算0-100之间奇数和偶数的和
        int oddSum = 0;//奇数的和
        int evenSum = 0;//偶数的和

        for (int i = 0; i <= 100; i++) {
            if(i%2 == 0) {
                evenSum += i;
            }else{
                oddSum+=i;
            }
        }
        System.out.println("奇数的和是:"+oddSum);
        System.out.println("偶数的和是:"+evenSum);

    }
}

用while或for循环输出1-1000之间能被5整除的数,并且每行输出三个

println输出完会换行

print输出完不会换行

package com.allen.struct;

public class ForDemo02 {
    public static void main(String[] args) {
        //用while或for循环输出1-1000之间能被5整除的数,并且每行输出三个
        for (int i = 0; i < 1000; i++) {
            if (i%5 == 0){
                System.out.print(i+"\t");
            }
            if (i%(5*3) == 0) {//i模5是可以被5整除,再模3是每三个为一组进行换行
                //换行
                System.out.println();
                //System.out.print("\n");
            }
        }
    }
}

打印九九乘法表

package com.allen.struct;

public class ForDemo03 {
    public static void main(String[] args) {
        //打印九九乘法表
        for (int j = 0; j < 9; j++) {
            for (int i = 1;i<=j;i++){
                System.out.print(j+"*"+i+" = "+(j*i)+"\t");
            }
            System.out.println();
        }
    }
}

在Java5中引入了一种主要用于数组的增强型for循环

在数组中会有重点使用,主要是用来遍历数组和一些集合对象

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

循环体

}

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

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

package com.allen.struct;

public class ForDemo05 {
    public static void main(String[] args) {
       //定义一个数组//
        int[] numbers = {10,20,30,40,50,60};

        for (int i = 0; i < 5; i++) {
            System.out.println(numbers[i]);
        }
        System.out.println("=========================");
        
       for(int x:numbers){
           System.out.println(x);
       }
    }
}

break & continue

break在任何循环语句的主体部分,均可以用break控制循环的流程。break用于强行退出循环,不执行循环中的剩余语句。(break在switch语句中使用)

package com.allen.struct;

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

continue语句用在循环语句体中,用于中止某次循环过程,及跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定

package com.allen.struct;

public class ContinueDemo {
    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+"\t");
        }
    }
}

goto关键字

  • java中没有goto语句,但是带标签的break和continue仍然可以看到goto语句的影子
  • 标签是指后面跟一个冒号的标识符,例如:label:
  • 对java来说唯一用到标签的地方是在循环语句之前,而在循环之前设置标签的唯一理由是:我们希望在其中嵌套另一个循环,由于break和continue关键字通常只中断当前循环,但若随同标签使用它们就会中断到存在标签的地方
package com.allen.struct;

public class LableDemo {
    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.print(i+"\t");
        }
    }
}

练习

打印三角形

package com.allen.struct;

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

标签:Java,scanner,05,流程,System,Scanner,println,public,out
From: https://www.cnblogs.com/bolunwei/p/17056682.html

相关文章