java流控制

用户交互Scanner

我们可以用Scanner类来获取用户的输入

通过Scanner类的Next()与nextLine()方法获取输入的字符串,在读取前我们可以用hasNext()与hasNextLine()判断是否还有输入的数据

next():
  1. 一定要读取到有效字符后才可以结束输入
  2. 对输入有效字符之前遇到的空白,next()方法会自动将其去掉
  3. 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符
  4. next()不能得到带有空格的字符串
 //从键盘接收数据
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入内容:");
		if (sc.hasNext()){
            //用next接收
            String str = sc.next();
            System.out.println("你的内容为:"+str);
        }
        //凡是Io流的类,如果不关闭会一直占用资源,养成好习惯
        sc.close();
nextLine():
  1. 以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符
  2. 可以获得空白
 //从键盘接收数据
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入内容:");
		if (sc.hasNextLine()){
            //用nextLine接收
            String str = sc.nextLine();
            System.out.println("你的内容为:"+str);
        }
        sc.close();
nextInt() 与 nextFloat()
       int x=0;
         float f=0.0f;
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入整数:");
        if (scanner.hasNextInt()){
            x=scanner.nextInt();
            System.out.println("你输入的整数是"+x);
        }else {
            System.out.println("你输入的不是整数");
        }

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

        scanner.close();
Scanner小案例

输入多个数字,并求其总和,每输入一个数字用回车确认,通过输入的非数字来结束输入并输出执行

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        double sum = 0;
        int m = 0;
        while (sc.hasNextDouble()){
            double x = sc.nextDouble();
            m=m+1;
            sum = sum+x;
            System.out.println("你输入了低"+m+"个数据,他当前的结果是"+sum);
        }
        System.out.println("你输入的和为"+sum);
        System.out.println("你输入的平均值为"+sum/m);
    }

if选择结构

if单选择结构
		if(布尔表达式){
            //如果布尔表达式为true将执行的语句
        }
if双选择结构
		if(布尔表达式){
            //如果布尔表达式为true将执行的语句
        }else{
    		//如果布尔表达式为else将执行的语句
		}
if多选择结构
		if(布尔表达式1){
            //如果布尔表达式为true将执行的语句
        }else if(布尔表达式2){
            //如果布尔表达式(布尔表达式2)为true将执行的语句
        }else if(布尔表达式3){
            //如果布尔表达式(布尔表达式3)为true将执行的语句
        }else{
    		//如果布尔表达式为else将执行的语句
		}
嵌套的if结构
		if(布尔表达式1){
            //如果布尔表达式1为true将执行的语句
        	if(布尔表达式2){
    			//如果布尔表达式2为true将执行的语句
			}
        }
switch多选择结构
        Scanner sc = new Scanner(System.in);
        String name = sc.nextLine();
            //JDK7的新特性 表达式可以用字符串  字符的本质还是数字
        // case穿透   switch 可以匹配一个具体的值
        switch (name) {
            case "张三":
                System.out.println("张三");
                break;//可选
            case "李四":
                System.out.println("李四");
                break;//可选
            case "王五":
                System.out.println("王五");
                break;//可选
            case "赵六":
                System.out.println("赵六");
                break;//可选
            default:
                System.out.println("你输入的名字不在列表内");
        }

循环结构

while 循环
        while(布尔表达式){
                   //循环内容
                }

只要布尔值为true,循环就会一直循环下去

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

循环条件为true就会造成无限循环【死循环】,会影响程序性能或造成程序卡死崩溃!我们正常业务中应该尽量避免死循环

            //死循环
            while (true){
                //等待客户连接
                // 定时检查
                //.....
            }

思考:计算1+2+3+…+100=?

      			int i = 0;
                int sum = 0;
                while (i<=100){
                    sum = sum+i;
                    i++;
                }
                System.out.println(sum);//5050
do…while 循环
            	do{
                    //循环内容
                    //代码语句
                }while(布尔表达式)
while 和do…while区别
  • while是先判断后执行,do…while是先执行后判断
  • do…while总是保证循环体会被至少执行一次!
for 循环

for 循环最有效,最灵活的循环结构

                for(初始化;布尔表达式;更新){
                    //代码语句
                }
                for (int i = 0; i < 100; i++) {
                    //代码语句
                }

练习 :

  1. 计算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("偶数的和:"+evenSum);
                System.out.println("奇数的和:"+oddSum);
    
  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%15==0){
                        System.out.println();
                    }
                }
    
  3. 打印九九乘法表

                for (int i=0;i<10;i++){
                    for (int j=1;j<=i;j++){
                        System.out.print(j+"*"+i+"="+(i*j)+"   ");
                    }
                    System.out.println();
                }
    

遍历数组元素

                int[] number = {10,20,30,40,50};//定义数组
                //遍历数组元素1
                for (int x:number){
                    System.out.println(x);
                }
                int[] number = {10,20,30,40,50};//定义数组
                //遍历数组元素2
                for (int i=0;i<number.length;i++){
                    System.out.println(number[i]);
                }

练习 :打印三角形

 //打印三角形
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();
}
     *
    ***
   *****
  *******
 *********

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 中,可以使用多线程和队列来实现流控制。以下是一个简单的示例代码: ```java import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class QueueFlowControlExample { public static void main(String[] args) { BlockingQueue<Runnable> queue = new ArrayBlockingQueue<>(10); // 创建大小为10的阻塞队列 ExecutorService executorService = Executors.newFixedThreadPool(5); // 创建线程池 // 生产者线程,将任务加入队列 Thread producerThread = new Thread(() -> { try { for (int i = 0; i < 100; i++) { queue.put(() -> { // 执行任务的逻辑 System.out.println("Task executed"); }); } } catch (InterruptedException e) { e.printStackTrace(); } }); // 消费者线程,从队列中取出任务并执行 Thread consumerThread = new Thread(() -> { try { while (true) { Runnable task = queue.take(); executorService.execute(task); } } catch (InterruptedException e) { e.printStackTrace(); } }); producerThread.start(); consumerThread.start(); } } ``` 在上述示例中,我们创建了一个大小为10的阻塞队列,并创建了一个固定大小为5的线程池。生产者线程不断地将任务放入队列中,消费者线程从队列中取出任务并提交给线程池执行。 通过控制队列的大小,我们可以限制并发执行的任务数量。当队列已满时,生产者线程会被阻塞,直到队列中有空闲位置。这样就实现了简单的流控制。 需要注意的是,上述示例只是演示了基本的流控制原理,并没有考虑线程池的关闭和异常处理等情况。在实际应用中,你可能需要根据具体需求进行适当的调整和完善。 另外,还可以根据具体需求使用其他类型的队列,如 LinkedBlockingQueue、PriorityBlockingQueue 等,或者使用自定义的队列实现。根据实际情况,也可以使用其他并发工具类来实现流控制,如信号量、计数器等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值