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

Java流程控制

时间:2025-01-19 17:42:39浏览次数:1  
标签:控制 Java scanner 流程 System Scanner println public out

scanner对象

之前学的基本语法没有实现程序与人的交互,现在可以使用scanner类来获取用户的输入(之前都是我们在输出程序,现在可以搞个程序然后输入数据得到结果)

基本语法

Scanner s=new Scanner(System.in);

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

以下使用next方法

package com.wang.base.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语句)
        if(scanner.hasNext()){
            String str=scanner.next();//程序会一直等待用户输入
            System.out.println("输出的内容为:"+str);
        }
        //用完scanner后,要关掉,节约资源
        scanner.close();
    }
}

以下使用nextline方法

package com.wang.base.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语句)
        if(scanner.hasNextLine()){
            String str=scanner.nextLine();
            System.out.println("输出的内容为:"+str);
        }
        //用完scanner后,要关掉,节约资源
        scanner.close();
    }
}

发现,如果输入hello world,next方法只输出了hello,而nextline输出了hello world

这就涉及到他们的不同:

next:

  1. 一定要读到有效字符后才可以结束输入
  2. 不能得到带有空格的字符串
  3. 以空格为结束符

nextline:

  1. 以enter为结束符
  2. 可以获得空白

进阶使用

具体到数据类型

package com.wang.base.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();
    }
}

输入多个数字,并求总和与平均数

package com.wang.base.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;//输入多少数字

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

顺序结构

从上而下运行

他是任何一个算法都离不开的基本算法结构

选择结构

  1. if单选择
  2. if双选择
  3. if多选择
  4. 嵌套的if结构
  5. switch多选择

if单选择

package com.wang.base.struct;

import java.util.Scanner;

public class Demo01 {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);//打开输入的门口
        System.out.println("请输入内容:");
        String s=scanner.nextLine();
        if (s.equals("Hello"))//equals是用来判断字符串是否相等
        {
            System.out.println(s);
        }
        System.out.println("End");
        scanner.close();
    }
}

if双选择

package com.wang.base.struct;

import java.util.Scanner;

public class Demo02 {
    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("及格");
        }else System.out.println("不及格");
        scanner.close();
    }
}

if多选择

package com.wang.base.struct;

import java.util.Scanner;

public class Demo02 {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入成绩:");
        int s=scanner.nextInt();
        if (s==100){
            System.out.println("恭喜满分");
        }else if(s<100&&s>=90) {
            System.out.println("A");
        }else if(s<90&&s>=80) {
            System.out.println("B");
        }else if(s<80&&s>=70) {
            System.out.println("C");
        }else if(s<70&&s>=60) {
            System.out.println("D");
        }else if (s<60&&s>=0){
            System.out.println("不及格");
        }else {
            System.out.println("成绩不合法");
        }
        scanner.close();
    }
}

注意事项:

  1. if至多有一个else,else必须在所有elseif的后面

  2. if可以有很多个elseif语句,他们必须在else之前

  3. 一旦有一个elseif检测为true,其他elseif和else跳过执行

嵌套if结构

switch多选择

package com.wang.base.struct;

public class Demo04 {
    public static void main(String[] args) {

        char grade='C';//自行输入一个数据
        //switch匹配具体一个数值
        switch(grade){
            case 'A':
                System.out.println("优秀");
                break;//有break可以解决case穿透问题
            case 'B':
                System.out.println("良好");
                break;
            case 'C':
                System.out.println("及格");
                break;
            case 'D':
                System.out.println("不及格");
                break;
            default://解决输入错误值时的情况(以后要考虑到)
                System.out.println("未知");
        }
    }
}

还可以支持输入string,因为字符的本质是数字,idea反编译了,所以可以输入字符串。

循环结构

  1. while循环
  2. do。。。while循环
  3. for循环

while循环

记得需要一个失效表达式结束循环

package com.wang.base.struct;

public class Demo05 {
    public static void main(String[] args) {
        //输出1~100
        int i=0;
        while (i<100){
            i++;
            System.out.println(i);
        }
    }
}
package com.wang.base.struct;

public class Demo05 {
    public static void main(String[] args) {
        //计算1~100之和
        int i=0;
        int sum=0;
        while (i<=100){
            sum=sum+i;
            i++;
        }System.out.println(sum);
    }
}

do...while循环

对于while而言,会先判断是否符合条件,如果不符合就不执行;但在一些情况下,需要就算不符合条件也至少执行一次,所以dowhile诞生了,它先执行再判断

package com.wang.base.struct;

public class Demo06 {
    public static void main(String[] args) {
        //计算1~100之和
        int i=0;
        int sum=0;
        do {
            sum=sum+i;
            i++;
        }while (i<=100);
        System.out.println(sum);
    }
}

for循环

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

package com.wang.base.struct;

public class Demo07 {
    public static void main(String[] args) {
        //初始化值//条件判断//迭代
        for (int a=1;a<=100;a++){
            System.out.println(a);
        }
        
    }
}

100.for回车后自动生成for循环(100可以换成其他的)

for (int i = 0; i < 100; i++) {}    

增强for循环

package com.wang.base.struct;

public class Demo11 {
    public static void main(String[] args) {
        int[]num={10,20,30,40,50};//定义了一个数组
        for (int i = 0; i < 5; i++) {
            System.out.println(num[i]);//取出数组中的每一个数字,与下面的输出结果一致
        }
        for (int x:num){
            System.out.println(x);//输出了遍历数组的元素
        }//所以这个其实是上面的简化,可以偷懒。用来输出数组中的元素的
    }
}

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

package com.wang.base.struct;

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

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

package com.wang.base.struct;

public class Demo09 {
    public static void main(String[] args) {
        //练习2:用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){
                System.out.print("\n");//实现每行输出三个
                //或者是System.out.println();
                //println输出完会换行
                //print输出完不换行
            }
        }
    }
}

练习3:打印九九乘法表

package com.wang.base.struct;
/*
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
 */
//想要达到这种效果
/*1.先打印第一列
2.把固定的1用循环包起来,引入变量j
3.去掉重复项,即让i<=j
4.调整样式,加上\t,System.out.println();
并把System.out.println(j + "*" + i + "=" + (j * i)+"\t");中println改成print
因为println是自动换行,但是我们需要他们在一行
 */
public class Demo10 {
    public static void main(String[] args) {
        for (int j = 0; j <= 9; j++) {
            for (int i = 1; i <= j; i++) {//i=j,可以去掉重复项
                System.out.print(j + "*" + i + "=" + (j * i)+"\t");//\t相当于空格
            }//用print,才能达到效果
            System.out.println();
        }
    }
}

break,cintinue,goto

break和continue的区别

package com.wang.base.struct;

public class demo12 {
    public static void main(String[] args) {
        int i = 0;
        while (i < 100) {
            i++;
            System.out.println(i);
            if (i%10==0) {
                break;//只是跳出循环,但是外面还能进行
            }
        }
        //输出了12345678910
        System.out.println("123");//能输出
        int a = 0;
        while (a < 100) {
            a++;
            if (a%10==0){
                System.out.println();
                continue;
            }
            System.out.print(a);
        }
        /*输出了123456789
        111213141516171819
        212223242526272829
        313233343536373839
        414243444546474849
        515253545556575859
        616263646566676869
        717273747576777879
        818283848586878889
        919293949596979899
        */
    }
}

所以:

break:很厉害,碰到他就直接干不了了

continue:碰到他只是跳过一次循环,其他循环仍然进行

goto关键字:在Java里没有goto,只作为了解

练习

打印三角形

package com.wang.base.struct;
/*
     *     1
    ***    3
   *****   5
  *******  7
 ********* 9

 */
public class Demo13 {
    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();
        }
    }
}

可以用debug(虫子)来看具体步骤,更加清晰

标签:控制,Java,scanner,流程,System,Scanner,println,public,out
From: https://www.cnblogs.com/redstar-190601/p/18679745

相关文章

  • java基本运算符
    在运算中:运算时定义不同的类型时,结果都自动升为混合运算类型中最高类型关系运算符:返回的结果:正确,错误,布尔值关系运算符%:模运算,取余+,-,*,/++:自增(b=a++即b=a+1,先执行a+1在赋值)(b=++a即b=a+1,a+1后在赋值)--:自减(b=a--即b=a-1,先执行a-1在赋值)(b=--a即b=a-1,a-1后在赋值)幂运算:2的三......
  • 图解 Python 编程(5) | Python流程控制
    ......
  • Java线程相关知识及线程池学习二
    阻塞队列定义在Java中,阻塞队列(BlockingQueue)是一种线程安全的队列。阻塞队列是Java并发包(java.util.concurrent)中的一个重要组件,常用于生产者-消费者模式中,一个线程产生数据放入队列,另外一个从队列取出数据进行消费。主要有两种情况在尝试添加元素到队列中时,如果队列已......
  • java类型转换
    由于java是强类型语言,所以在运算的时候需要用到类型转换低(byte、short、char——>int——>long——>float——>double)高运算中不同类型的数据先转化为同一类型,然后在进行运算强制转换:(类型)变量名(高——>低)/自动转换(低——>高)注意点不能对布尔值进行转换不能对象类型转换......
  • 深入理解 Java 双列集合:Map 家族的探索与实践
    在Java编程的世界里,集合框架是组织和操作数据的强大工具。其中,双列集合以独特的键值对存储方式,为我们处理数据提供了别样的思路。本文将深入探讨Java双列集合的核心概念、常见实现类及其应用场景。双列集合的基本特性双列集合,区别于单列集合,它一次存储一对数据,即键(Key)和......
  • 偷偷的学Java
    序章:为何要偷偷学Java?•Java,不仅仅是一种编程语言• 偷偷学Java,快速提升你的竞争力•Java学习秘籍第一章:Java的神秘面纱•Java的起源与发展历程•Java的生态系统与应用场景•Java与其他编程语言的比较第二章:搭建你的Java秘密基地•安装Java开发工具包(JDK):不被发现......
  • java变量及八大基本数据类型的定义
    变量变量是什么:就是可以变化的量!java是一种强类型语言,每个变量都必须声明其类型java变量是程序中最基本的存储单元,其中要素包括变量名,变量类型,作用域注意事项每个变量都有类型,类型可以是基本类型,也可以是引用类型变量名必须是合法的标识符变量声明是一条完整的语句,因此......
  • ATF引导启动流程整理-Part2:BL1引导启动流程整理
    接上一章的介绍,本文详细整理一下BL1阶段的流程Ch3:ATF启动流程上面一章简单的介绍了ATF的隔离和划分,下面就介绍一下使用ATF初始启动的流程。ARMv8的启动流程包含多个阶段,典型的官方定义的标志阶段包括BL1、BL2、BL31、BL32、BL33,根据不同需求这些阶段可以添加或者裁剪。......
  • 【华为OD-E卷 - 第k个排列 100分(python、java、c++、js、c)】
    【华为OD-E卷-第k个排列100分(python、java、c++、js、c)】题目给定参数n,从1到n会有n个整数:1,2,3,…,n,这n个数字共有n!种排列。按大小顺序升序列出所有排列的情况,并一一标记,当n=3时,所有排列如下:“123”“132”“213”“231”“312”“321”给......
  • 咱们继续学Java——高级篇 第一百八十三篇:之Java高级Swing编程之JEditorPane组件与进
    咱们继续学Java——高级篇第一百八十三篇:之Java高级Swing编程之JEditorPane组件与进度指示器在Java编程的学习旅程中,我们始终保持着积极探索、共同成长的态度。今天,我们将深入学习Java高级Swing编程中关于JEditorPane组件与进度指示器的部分,包括JEditorPane组件的功能特性......