今晚的月色温柔

导航

打印数字字母

【问题描述】编写两个线程,一个线程打印1-52的整数,另一个线程打印字母A-Z。打印顺序为12A34B56C...5152Z。按照整数和字母的顺序从小到大打印,每打印两个整数后打印一个字母,交替循环,直到打印到整数52和字母Z结束。

要求:

(1)编写打印类Printer,声明私有属性index,初值为1,用来表示是第几次打印。

(2)在打印类Printer中编写打印数字的方法print(int i),index是3的倍数就是用wait()方法等待,否则就输出i,是用notifyAll()唤醒其他线程。

(3)在打印类Printer中编写打印字母的方法print(char ch),index如果不是3的倍数就等待,否则就打印输出字母ch,是用notifyAll()唤醒其他线程。

(4)编写打印数字的线程NumberPrinter。

(5)编写打印字母的线程LetterPrinter。

【输入形式】
【输出形式】12A34B56C78D910E1112F1314G1516H1718I1920J2122K2324L2526M2728N2930O3132P3334Q3536R3738S3940T4142U4344V4546W4748X4950Y5152Z

【样例输入】
【样例输出】
【样例说明】
【评分标准】

import  java.util.Scanner;

class Printer {
private int index=1;//设为1,方便计算3的倍数
//打印数字的方法,每打印两个数字,等待打印一个字母
public synchronized void print(int i){
while(index%3==0){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.print(""+i);
index++;
notifyAll();
}
//打印字母,每打印一个字母,等待打印两个数字
public synchronized void print(char c){
while(index%3!=0){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.print(""+c);
index++;
notifyAll();
}
}
class LetterPrinter extends Thread {
private Printer p;
public LetterPrinter(Printer p){
this.p=p;
}
public void run(){
for(char c='A';c<='Z';c++){
p.print(c);
}
}
}
class NumberPrinter extends Thread {
private Printer p;
public NumberPrinter(Printer p){
this.p=p;
}
public void run(){
for(int i=1;i<=52;i++){
p.print(i);
}
}
}


public  class  Main  {
        public  static  void  main(String[]  args)  {
                Scanner  in  =  new  Scanner(System.in);
                int  selected  =  in.nextInt();
                switch  (selected)  {
                case  1:
                        System.out.println("compile  pass!");
                        break;
                case  2:
                        Printer  printer  =  new  Printer();
                        new  NumberPrinter(printer).start();
                        new  LetterPrinter(printer).start();
                }
                in.close();
        }
}

posted on 2020-11-06 18:38  1022  阅读(158)  评论(0编辑  收藏  举报