力扣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);
            }
        }
    }
}
相关推荐
夫唯不争,故无尤也1 分钟前
JavaWeb流式传输速查宝典
java·流式传输
苏小瀚1 小时前
算法---位运算
java·算法
Code小翊1 小时前
归并排序基础理解
数据结构·算法·排序算法
Camel卡蒙1 小时前
数据结构——二叉搜索树Binary Search Tree(介绍、Java实现增删查改、中序遍历等)
java·开发语言·数据结构
2401_841495641 小时前
【数据结构】基于Floyd算法的最短路径求解
java·数据结构·c++·python·算法··floyd
珊珊而川1 小时前
SAUP 算法
算法
珹洺1 小时前
Java-Spring入门指南(二十七)Android Studio 第一个项目搭建与手机页面模拟器运行
java·spring·android studio
寂静山林2 小时前
UVa 1471 Defense Lines
算法
程序猿DD2 小时前
Java 25 中的 6 个新特性解读
java·后端
稻草猫.2 小时前
文件 IO
java·笔记·后端·java-ee·idea