打印数字字母
【问题描述】编写两个线程,一个线程打印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();
}
}