力扣1116.打印零与奇偶数--------题解

题目描述

现有函数 printNumber 可以用一个整数参数调用,并输出该整数到控制台。

例如,调用 printNumber(7) 将会输出 7 到控制台。

给你类 ZeroEvenOdd 的一个实例,该类中有三个函数:zero、even 和 odd 。ZeroEvenOdd 的相同实例将会传递给三个不同线程:

线程 A:调用 zero() ,只输出 0

线程 B:调用 even() ,只输出偶数

线程 C:调用 odd() ,只输出奇数

修改给出的类,以输出序列 "010203040506..." ,其中序列的长度必须为 2n 。

实现 ZeroEvenOdd 类:

ZeroEvenOdd(int n) 用数字 n 初始化对象,表示需要输出的数。

void zero(printNumber) 调用 printNumber 以输出一个 0 。

void even(printNumber) 调用printNumber 以输出偶数。

void odd(printNumber) 调用 printNumber 以输出奇数。

代码

java 复制代码
class ZeroEvenOdd {
    private int n;
    public int a = 1;
    public int b = 1;
    public ZeroEvenOdd(int n) {
        this.n = n;
    }

    // printNumber.accept(x) outputs "x", where x is an integer.
    public void zero(IntConsumer printNumber) throws InterruptedException {
        while(true){
            if(b == n+1){
                break;
            }
                if( a%2 != 0){
                    printNumber.accept(0);
                    a++;
                    }else{
                        Thread.sleep(0);
                    }
        }
    }

    public void even(IntConsumer printNumber) throws InterruptedException { 
        while(true){
            if(b == n+1){
                break;
            }
            if(a%2==0&&a/2%2 == 0){
                printNumber.accept(b);
                a++;
                b++;
            }else{
                    Thread.sleep(0);
                }
        }
    }
    public void odd(IntConsumer printNumber) throws InterruptedException {
        while(true){
            if(b == n+1){
                break;
            }
            if(a%2==0&&a/2%2 !=0){
                printNumber.accept(b);
                a++;
                b++;
            }else{
                Thread.sleep(0);
            }
        }
    }
}
相关推荐
Jack201 分钟前
HarmonyOS开发中错误处理策略:网络异常统一处理
算法
小小杨树2 小时前
读懂色彩:拍照调色不再难
算法·计算机视觉·配色
唐青枫6 小时前
Java JDBC 实战指南:从 Connection 到事务和连接池
java
一个做软件开发的牛马7 小时前
MyBatis-Plus 从零实战:完整搭建可运行 Demo,BaseMapper 零 SQL、Wrapper 条件构造、分页插件与代码生成器详解
java·后端
用户3721574261357 小时前
Java 处理 PDF 图片:提取 PDF 中的图片,并压缩 PDF 图片体积
java
用户3721574261357 小时前
Java 打印 Word 文档:从基础打印到高级设置
java
JieE21218 小时前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法
JieE21218 小时前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解
javascript·算法
用户3521802454751 天前
当 Prompt 学会"热更新":Spring Boot × Nacos3 AI 实战
java·spring boot·ai编程