Java流程控制

本文详细介绍了Java中的Scanner类如何实现用户交互,包括next()和nextLine()方法的使用,以及处理不同类型数据如整数和浮点数。通过实例演示了不同场景下Scanner的应用,如输入验证和循环处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

戚心禾枱志

用户交互Scanner

Java提供了一个实现程序和人交互的工具类,用Scanner来获取用户的输入。java.util.Scanner是从Java5开始出现。

基本语法:

Scanner s = new Scanner(System.in)

通过Scanner类的next()和nextline()获取输入的字符串;使用hasNext()和hasNextline()判断是否还有输入的数据。

next():
  • 一定要读取到有效字符后才结束输入
  • 对有效字符之前的空白,自动去掉
  • 将有效字符之后的空白当成分隔符或者结束符
  • next()不能得到带空格符的字符串
nextline():
  • 以Enter为结束符,返回得是输入回车之前的所有字符
  • 可以获得空白
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);
}
    //凡是属于IO流的类如果不关闭就会一直占用
    scanner.close();
}
}
结果:
使用next方式接收:
Hello world
输入的内容为:Hello
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();
}
}
结果:
使用nextline方式接收:
pig pig
输出的内容为:pig pig
package Scanner;
import java.util.Scanner;
public class ScannerReview {
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入整数:");


        if(scanner.hasNextInt()){
            int i = scanner.nextInt();
            System.out.println("整数数据为:"+i);
        }else{
            System.out.println("你输入的不是整数数据");
        }


        if(scanner.hasNextFloat()){
            float f = scanner.nextFloat();
            System.out.println("你输入的是小数数据:"+f);
        }else{
            System.out.println("你输入的不是小数数据");
        }

        scanner.close();
    }
}

结果:
请输入整数:
f
你输入的不是整数数据
你输入的不是小数数据
package Scanner;

import java.util.Scanner;

public class Demo05 {
    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++;
        sum = sum+x;
        System.out.println("你输入了第"+m+"个数据,当前结果sum = "+sum);
    }
    System.out.println(m+"个数字的和为:"+sum);
    System.out.println(m+"个数字的平均值是:"+sum/m);




    scanner.close();
}
}

结果:
8
你输入了第1个数据,当前结果sum = 8.0
6
你输入了第2个数据,当前结果sum = 14.0
10
你输入了第3个数据,当前结果sum = 24.0
v
3个数字的和为:24.0
3个数字的平均值是:8.0

顺序结构

if选择结构

if单选择结构

package struct;

import java.util.Scanner;

public class IfDemo01 {
    public static void main(String[] args){
        java.util.Scanner scanner = new Scanner(System.in);
        System.out.println("请输入内容:");
        String s = scanner.nextLine();
        //equals:判断字符串是否相等
        if(s.equals("Hello")){
            System.out.println(s);

}       else {
            System.out.println("End");
}

        scanner.close();
}
}
结果:
请输入内容:
Hello
Hello

if双选择结构

package Scanner;
import java.util.Scanner;
public class ScannerReview {
    public static void main(String[] args){
        Scanner yuboyao = new Scanner(System.in);
        System.out.println("请输入你的数学分数:");
        int fenshu = yuboyao.nextInt();
        if(fenshu>=60){
            System.out.println("你的师生情产生作用了呢~");
        }else{
            System.out.println("恭喜你明年还可以上应用统计");
        }
        yuboyao.close();
    }
}

结果:
请输入你的数学分数:
60
你的师生情产生作用了呢~

if多选择结构:

package Scanner;
import java.util.Scanner;
public class ScannerReview {
    public static void main(String[] args){
        Scanner sm = new Scanner(System.in);
        System.out.println("请输入你的应用统计分数:");
        int score = sm.nextInt();
        if(score<60 && score>=0){
            System.out.println("你没有及格哦 ┭┮﹏┭┮");
        }
        else if(score<70 && score>=60){
            System.out.println("你的等级是D哦~");
        }
        else if(score<80 && score>=70){
            System.out.println("你的等级是C哦~");
        }
        else if(score<90 && score>=80){
            System.out.println("你的等级是B哦~");
        }
        else if(score<100 && score>=90){
            System.out.println("你的等级是A哦~");
        }
        else if(score == 100){
            System.out.println("真棒,满分哦~");
        }
        else{
            System.out.println("你的成绩不合法哦");
        }
        sm.close();
    }
}

结果:
请输入你的应用统计分数:
1000
你的成绩不合法哦

if嵌套结构

switch多选择结构

判断一个变量和与一些列值中的某个值是否相等

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

  • byte,short,int或者char
  • 从Java SE 7开始,支持String类型了
  • case标签必须是字符串常量或字面量
package struct;

public class SwitchDemo01 {
    public static void main(String[] args){
        //不加break会出现case穿透    //switch匹配一个具体的值
    char grade = 'B';
    switch (grade){
        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;
        default:
            System.out.println("未知等级");
}

}
}
结果:
良好
package struct;
public class SwitchDemo02 {
    public static void main(String[] args){
        String name = "xiaolong";
        //JDK7的新特性,表达式可以是字符串
        //字符的本质还是数字
        
        //反编译   java--class(字节码文件)--反编译(IDEA)

        switch (name){
            case"yby":
                System.out.println("yby");
                break;
            case"luobote":
                System.out.println("luobote");
                break;
            case"xiaolong":
                System.out.println("xiaoxiaolong");
                break;
            default:
                System.out.println("异常");
}

}
}
结果:
xiaoxiaolong

反编译:

把class文件丢到IDEA里就可以看到源码 P37 11:20
①Project Struc
②复制输出路径,并且打开文件所在位置,找到所需.class文件
③Open in Explore,把.class文件拖入即可
在这里插入图片描述

循环结构

while循环

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

少部分情况需要循环一直进行,比如服务器的请求响应等

package struct;
public class WhileDemo03 {
    public static void main(String[] args){
        //计算1~100的和
        int i = 0;
        int sum = 0;
        while(i<100){
            i++;
            sum+=i;

}
        System.out.println("1~100的和为:"+sum);
}
}
结果:
1~100的和为:5050

do…while循环

package struct;
public class DoWhileDemo01 {
    public static void main(String[] args){
        int i = 0;
        int sum = 0;
        do{
            sum+=i;
            i++;		//sunm和i的计算要分先后顺序
}       while(i<=100);
        System.out.println("1~100的和为"+sum);
}
}
结果:
1~100的和为5050

package struct;
public class DoWhileDemo02 {
    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);
}
}
结果:
===============
0

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("循环结束");

        for(int i =1;i<=100;i++){	//100.for+Enter
            //初始化条件;条件判断;迭代
            System.out.println(i);
        }
        System.out.println("for循环结束");
		/**
		可以是空语句
		*/

}
}

package struct;
public class ForDemo02 {
    public static void main(String[] args){
        //练习1:计算0~100之间的奇数和偶数的和
        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);
}
}
结果:
奇数和为:2500
偶数和为:2550
package struct;
public class ForDemo03 {
    public static void main(String[] args){
        //练习2:用while或for循环输出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();   // System.out.print('\n);
}
}
            //println:输出完 会换行
            //print:不换行
}
}
结果:
0	
5	10	15	
20	25	30	
35	40	45	
50	55	60	
65	70	75	
80	85	90	
95	100	105	
110	115	120	
125	130	135	
140	145	150	
155	160	165	
170	175	180	
185	190	195	
200	205	210	
215	220	225	
230	235	240	
245	250	255	
260	265	270	
275	280	285	
290	295	300	
305	310	315	
320	325	330	
335	340	345	
350	355	360	
365	370	375	
380	385	390	
395	400	405	
410	415	420	
425	430	435	
440	445	450	
455	460	465	
470	475	480	
485	490	495	
500	505	510	
515	520	525	
530	535	540	
545	550	555	
560	565	570	
575	580	585	
590	595	600	
605	610	615	
620	625	630	
635	640	645	
650	655	660	
665	670	675	
680	685	690	
695	700	705	
710	715	720	
725	730	735	
740	745	750	
755	760	765	
770	775	780	
785	790	795	
800	805	810	
815	820	825	
830	835	840	
845	850	855	
860	865	870	
875	880	885	
890	895	900	
905	910	915	
920	925	930	
935	940	945	
950	955	960	
965	970	975	
980	985	990	
995	
package struct;
public class ForDemo04 {
    public static void main(String[] args){
        //练习3:输出99乘法表
        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();
        }

}
}
结果:
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	

增强for循环

主要用于数组或者集合

package struct;
public class ForDemo05 {
    public static void main(String[] args){
        int[] numbers = {10,20,30,40,50};   //定义了一个数组
        for (int i = 0; i < 5; i++) {
            System.out.print(numbers[i]+"\t");

        }
        System.out.println();
        System.out.println("++++++++++++++++++++++++++++");
        //遍历数组的元素
        for(int x:numbers){             //数组numbers将每一项赋值给整数型x,并输出
            System.out.print(x+"\t");
}
}
}
结果:
10	20	30	40	50	
++++++++++++++++++++++++++++
10	20	30	40	50	

break continue

package struct;
public class BreakDemo {
    public static void main(String[] args){
        int i = 0;
        while(i<100){
            i++;
            System.out.print(i+"\t");
            if(i==30){
                break;          //跳出循环
            }

        }
        System.out.println();
        System.out.println("123");
}
}

结果:
1	2	3	4	5	6	7	8	9	10	11	12	13	14	15	16	17	18	19	20	21	22	23	24	25	26	27	28	29	30	
123
package struct;
public class ContinueDemo {
    public static void main(String[] args){
        int i = 0;
        while(i<100){
            i++;
            if(i%10==0){                    //输出换行之后跳回i++
                System.out.println();
                continue;
            }
            System.out.print(i+"\t");
}
}
}
结果:
1	2	3	4	5	6	7	8	9	
11	12	13	14	15	16	17	18	19	
21	22	23	24	25	26	27	28	29	
31	32	33	34	35	36	37	38	39	
41	42	43	44	45	46	47	48	49	
51	52	53	54	55	56	57	58	59	
61	62	63	64	65	66	67	68	69	
71	72	73	74	75	76	77	78	79	
81	82	83	84	85	86	87	88	89	
91	92	93	94	95	96	97	98	99	

带标签的continue(理解)

麻烦,不建议使用

package struct;
public class LabelDemo {
    //打印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+"\t");
}
}
package struct;public class TestDemo {
    public static void main(String[] args){
        //打印三角形  5行
        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++) {               //如果j<=i,那么第一行满足1<=1,三角形顶部就有两个点,错误
                System.out.print("*");                  //打出*三角形的右半部分
            }
            System.out.println();
        }
        System.out.println("nice,bro");
}
}
结果:
     *
    ***
   *****
  *******
 *********
nice,bro

Debug

在这里插入图片描述程序运行到该行 会停止,并且输出当前i的值[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lEC1MIan-1649383260545)(C:\Users\86156\AppData\Roaming\Typora\typora-user-images\image-20220408095153372.png)]程序会显示每一步的自变量的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值