力扣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);
            }
        }
    }
}
相关推荐
似水明俊德2 分钟前
06-C#
开发语言·c++·算法·c#
xiaohe077 分钟前
自己编译RustDesk,并将自建ID服务器和key信息写入客户端
java
ysa0510307 分钟前
模拟【打牌游戏】
数据结构·c++·笔记·算法
smile_life_9 分钟前
使用idea查看maven依赖
java·maven·intellij-idea
Predestination王瀞潞10 分钟前
1. Java SE到底是什么:不仅仅是面向对象
java·开发语言
苏渡苇14 分钟前
虚拟线程(Virtual Threads)初体验:10万并发如喝水(JDK 21)
java·高并发·虚拟线程·jdk21·virtual threads
weixin_6495556718 分钟前
C语言程序设计第四版(何钦铭、颜晖)第八章指针之循环后移
c语言·c++·算法
_饭团20 分钟前
C语言数组全解析:从入门到精通
c语言·开发语言·数据结构·经验分享·笔记·学习·算法
地平线开发者23 分钟前
征程 6 | 多阶段模型量化&debug 简介
算法·自动驾驶
张李浩25 分钟前
Leetcode 454 四数相加II 采用哈希表解决
leetcode·哈希算法·散列表