学习java三周,关于<>第15章习题4的解答,请高手捉虫

babytech 2009-09-18 12:55:01
题目:
设计一个程序E1504.java, 使用3个JTextField元件的线程,每个线程休息的毫秒数由随记数决定,
并随机显示26个英文字母之一。

解答代码:
//MyWindowListener.java
package e1504;
import java.awt.event.*;

public class MyWindowListener extends WindowAdapter {
public void windowClosing(WindowEvent e)
{
System.exit(1);
}
}

//E1504.java
package e1504;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
//import myclass.MyWindowListener;

class E1504 extends JFrame
implements ActionListener
{
/**
* @param args
*/
private static final long serialVersionUID = 1L;
JTextField tf1= new JTextField(" ",10);
JTextField tf2= new JTextField(" ",10);
JTextField tf3= new JTextField(" ",10);
private Container c;
private Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
private Dimension frameSize;
private static int para[]= {1,2,3};
public E1504()
{
super("E1504.java");
c = getContentPane();
c.setLayout(new FlowLayout(FlowLayout.CENTER));
c.add(tf1);
c.add(tf2);
c.add(tf3);
tf1.setEditable(false);
tf2.setEditable(false);
tf3.setEditable(false);
setSize(380,60);
setVisible(true);

// Center the window
frameSize = this.getSize();
if (frameSize.height > screenSize.height)
{
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width)
{
frameSize.width = screenSize.width;
}
setLocation((screenSize.width - frameSize.width)/2, (screenSize.height - frameSize.height)/2);
}
public void actionPerformed(ActionEvent e)
{
//tf1.setText("Run Thread1:" + eThread.pChar);
//tf2.setText("Run Thread2:" + eThread.pChar);
//tf3.setText("Run Thread3:" + eThread.pChar);
}
public static void main(String args[])
{
// TODO Auto-generated method stub
E1504 app = new E1504();
app.addWindowListener(new MyWindowListener());

E1504Thread tfThread[] = new E1504Thread[3];

for (int i=0; i<3; i++)
tfThread[i] = new E1504Thread(para[i], app);

for (int i=0; i<3; i++)
{
new Thread(tfThread[i]).start();
}
}
}

class E1504Thread implements Runnable
{
private int sleepTime = 0;
private int pid;
private char pChar;
private E1504 frameObj;
public E1504Thread(int id, E1504 eFrame)
{
frameObj =eFrame;
pid = id;
}
public void run()
{
while (true)
{
try
{
Thread.sleep(sleepTime);
if (pid == 1)
frameObj.tf1.setText("Run Thread" + 1 + ":" + pChar);
else if (pid == 2)
frameObj.tf2.setText("Run Thread" + 2 + ":" + pChar);
else if (pid == 3)
frameObj.tf3.setText("Run Thread" + 3 + ":" + pChar);
}
catch (InterruptedException e)
{
e.printStackTrace();
return;
}
sleepTime = (int)(Math.random()*1000);
pChar = (char)((Math.random()*26)+ 65);
}
}
}

以上代码在eclipse SDK 3.2.1下编译通过。基本满足题目要求
现请教下高手还有什么方法可实现?
...全文
189 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
pang040328 2009-09-20
  • 打赏
  • 举报
回复
没学过线程
itisonlylove_yy 2009-09-18
  • 打赏
  • 举报
回复
没人讲解呀
程序设计训练基础题库 1. 随机产生一些1—100之间的整数,直到产生的数为50为止。 2. 计算1—1000之间能同时被3和5整除的整数的和。 尝试使用多种方法/更快的求解这类题型 3. 打印下列图形: 1 121 12321 121 1 4. 一百匹马驮一百块瓦,一匹大马可以驮3块,一匹母马可驮2块,小马2匹可驮1块。试编程求需要各种马多少匹? 5. 有三种纪念邮票,第一种每套一张售价2元,第二种每套一张售价4元,第三种每套9张售价2元。现用100元买了100张邮票,问这三种邮票各买几张? 6. 赵、钱、孙、李、周五人围着一张圆桌吃饭。饭后,周回忆说:“吃饭时,赵坐在钱旁边,钱的左边是孙或李”;李回忆说:“钱坐在孙左边,我挨着孙坐”。结果他们一句也没有说对。问,他们在怎样坐的? 7. 找数。一个三位数,各位数字互不相同,十位数字比个位、百位数字之和还要大,且十位、百位数字之和不是质数。编程找出所有符合条件的三位数。 注:1. 不能手算后直接打印结果。 2. “质数”即“素数”,是指除1和自身外,再没有其它因数的大于1的自然数。 8. 选人。一个小组共五人,分别为A、B、C、D、E。现有一项任务,要他们中的3个人去完成。已知:(1)A、C不能都去;(2)B、C不能都不去;(3)如果C去了,D、E就只能去一个,且必须去一个;(4)B、C、D不能都去;(5)如果B去了,D、E就不能都去。编程找出此项任务该由哪三人去完成的所有组合。 9. 输入一个字符串,内有数字和非数字字符。如A123X456Y7A,302ATB567BC,打印字符串中所有连续(指不含非数字字符)的数字所组成的整数,并统计共有多少个整数。 10. A、B、C三人进入决赛,赛前A说:“B和C得第二,我得第一”;B说:“我进入前两名,丙得第三名”;C说:“A不是第二,B不是第一”。比赛产生了一、二、三名,比赛结果显示:获得第一的选手全说对了,获得第二的选手说对了一句,获得第三的选手全说错了。编程求出A、B、C三名选手的名次。 11. 甲、乙、丙、丁四人共有糖若干块,甲先拿出一些糖分给另外三人,使他们三人的糖数加倍;乙拿出一些糖分给另外三人,也使他们三人的糖数加倍;丙、丁也照此办理,此时甲、乙、丙、丁四人各有16块,编程求出四个人开始各有糖多少块。 12. 截数问题: 任意一个自然数,我们可以将其平均截取成三个自然数。例如自然数135768,可以截取成13,57,68三个自然数。如果某自然数不能平均截取(位数不能被3整除),可将该自然数高位补零后截取。现编程从键盘上输入一个自然数N(N的位数<12),计算截取后第一个数加第三个数减第二个数的结果。 13. 从键盘输入一段英文,将其中的英文单词分离出来:已知单词之间的分隔符包括空格、 问号、句号(小数点)和分号。 例如:输入:There are apples; oranges and peaches on the table. 输出:there are apples oranges and peaches on the table 14. 山乡希望小学收到一箱捐赠图书,邮件上署名是“兴华中学高二班”,山乡希望小学校 长送来了感谢信,可是兴华中学高二年级有四个班,校长找来了四个班的班长,问他们是哪 个班做的这件好事。一班的班长说:“是四班做的。”二班的班长说:“是三班做的好事。”三 班的班长说:“不是我们班。” 四班的班长说:“三班的班长说的不对。” 四个班的班长都说不是自己班做的,这就难坏了校长,后来得知四个班的班长中有两个 说得是真话,有两个没有说真话,你利用计算机的逻辑判断编一个程序,找出究竟是哪个 班做了这件好事。不能手算后直接打印结果。 15. A,B,C,D,E五个人合伙夜间捕鱼,凌晨时都疲惫不堪,各自在河边的树丛中找地 方睡着了,日上三竿,E第一个醒来,他将鱼数了数,平分成五分,把多余的一条扔进河中, 拿走一份回家去了,D第二个醒来,他并不知道有人已经走了,照样将鱼平分成五分,又扔掉多余的一条,拿走自己的一份,接着C,B,A依次醒来,也都按同样的办法分鱼(平分成 五份,扔掉多余的一条,拿走自己的一份),问五人至少合伙捕到多少条鱼。 也许你能用数学办法推出鱼的条数,

58,446

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧