大家帮忙看看,很简单但出错了

问题描述

packagecom.eddic.test;importjava.util.Date;importcom.eddic.adt.Queue;importcom.eddic.adtexception.QueueException;publicclassQueueTest{publicstaticvoidmain(Stringargs[]){Queueprinter=newQueue();printer.enqueue(newPrintJob("刘备",newDate()));printer.enqueue(newPrintJob("关云长",newDate()));try{Thread.sleep(2000);//sleep放在这里会出现小小的问题,未弄懂while(!printer.isEmpty()){System.out.println("Printingstarts:"+(newDate()));System.out.println("tJob:"+printer.dequeue());}System.out.println("Printingstarts:"+(newDate()));System.out.println("tJob:"+printer.dequeue());}catch(QueueExceptionqe){System.err.println(qe);}catch(InterruptedExceptionie){System.err.println(ie);}}}

打印出来的顺序和理论上的不一样,请教大家,可否简单讲一下原因注:Queue为自己写的队列类,QueueException为简单的队列异常类,PrintJob类只有name、Date属性,以及重写了toString()方法而已

解决方案

解决方案二:
可能是你的queue写的有问题吧。试试系统的LinkedBlockingQueue
解决方案三:
不知你的程序想做什么。1)你程序中放了sleep(2000)(想做什么呢?),那么,2秒时间一到,立即发出InterruptedException,你的程序就停止了,那么你后边的那个while()代码就没机会执行了。2)while()代码是将queue中元素按进行队列的次序进行输出。while()全部输出完成后,那么while()之后的那个再一次输出的代码又是干什么的呢?一句话:不知道你这个代码想要做的意图是什么?你究竟想要做什么事情?
解决方案四:
引用1楼coolfatman的回复:

可能是你的queue写的有问题吧。试试系统的LinkedBlockingQueue

昨天我也是给一个同学解决了一个打印顺序的问题,关于递归栈的。你好好看看你的queue类,可能写成了栈呢
解决方案五:
你的程序错误很多,还能运行出结果吗?1.你的类QueueTest并没有设为线程,可以implementsRunnable,然后重写run函数2.你让主函数休眠2秒干嘛啊,你的程序很乱。不是改一两处就能实现的多看点基础知识,参考一下别人写的程序。
解决方案六:
引用2楼jiangnaisong的回复:

不知你的程序想做什么。1)你程序中放了sleep(2000)(想做什么呢?),那么,2秒时间一到,立即发出InterruptedException,你的程序就停止了,那么你后边的那个while()代码就没机会执行了。2)while()代码是将queue中元素按进行队列的次序进行输出。while()全部输出完成后,那么while()之后的那个再一次输出的代码又是干什么的呢?一句话:不知道……

同意2楼的说法我感觉你的睡眠应该单独放出来丢到while里面去执行吧?不然2秒一次,那个while该怎么去执行呢?然后,你另外一个类也没贴上去。。。
解决方案七:
packagecom.eddic.adt;importcom.eddic.adtexception.QueueException;publicclassQueue{privateNodehead;privateNodetail;publicQueue(){head=tail=null;}publicvoidenqueue(Objectobj){Nodenode=newNode(obj);if(head==null)head=node;elsetail.next=node;tail=node;}publicObjectdequeue()throwsQueueException{if(head==null)thrownewQueueException("从空队列删除元素");else{Objectdata=head.data;head=head.next;if(head==null)tail=null;returndata;}}publicObjectpeek()throwsQueueException{if(head==null)thrownewQueueException("在空队列中查看元素");elsereturnhead.data;}publicbooleanisEmpty(){return(head==null);}}

这个就是Queue类了,我只是看书上的,现在测试一下!2楼说的(1)我不觉得是对的哟~~至于(2)我也知道这样子没啥意义,不过只为测试,看下结果下面是QueueException类packagecom.eddic.adtexception;publicclassQueueExceptionextendsException{publicQueueException(){super("队列出现异常");}publicQueueException(Stringmsg){super(msg);}}

运行的结果为:(有时会不一样)Printingstarts:SunMar2719:45:22CST2011com.eddic.adtexception.QueueException:从空队列删除元素Job:刘备(SunMar2719:45:20CST2011)Printingstarts:SunMar2719:45:22CST2011Job:关云长(SunMar2719:45:20CST2011)Printingstarts:SunMar2719:45:22CST2011
解决方案八:
packagecom.eddic.test;importjava.util.Date;publicclassPrintJob{privateStringname;privateDatedate;publicPrintJob(Stringname,Datedate){this.name=name;this.date=date;}publicStringtoString(){return(name+"("+date+")");}}

类都贴出来了,我知道这比较滑稽,希望大家别鄙视哦~~望不吝赐教!
解决方案九:
引用2楼jiangnaisong的回复:

不知你的程序想做什么。1)你程序中放了sleep(2000)(想做什么呢?),那么,2秒时间一到,立即发出InterruptedException,你的程序就停止了,那么你后边的那个while()代码就没机会执行了。2)while()代码是将queue中元素按进行队列的次序进行输出。while()全部输出完成后,那么while()之后的那个再一次输出的代码又是干什么的呢?一句话:不知道……

书上的例子,我打出来测试一下!按照我的理解,sleep2秒后,应该又回到主线程继续执行下去,即执行while,先打印的应该是队列里边的元素,然后结束while,再打印就会抛出空队列异常!但是实践结果却是乱了套,看下我发的结果,不仅是先抛出异常,而且打印的顺序也错了——不应该是Printingstarts先的吗还请大哥指点指点,或是在你的机器上试跑一下。小弟先谢啦

时间: 2024-10-03 10:26:53

大家帮忙看看,很简单但出错了的相关文章

请诸位帮忙解答很简单的考题^_^

问题描述 不好意思帮同事[img=http://photo.yupoo.com/dk1802/739336fc6e22/medium/][/img][img=http://photo.yupoo.com/dk1802/757656fc6e2d/medium/][/img]的忙帮着发出来这个考卷我知道比较简单但是我对这方面压根就不懂请高手给予解答 解决方案 解决方案二:还有[img=http://photo.yupoo.com/dk1802/396546fc6e34/medium/][/img][

asp语句,高手帮忙看下,哪里出错了

问题描述 <%SetconnServer.CreateObject("ADODB.Connection")conn.Open"Provider=Microsoft.Jet.OLEDB.4.0;dataSource=aaaa.mdb"Setrs=Server.CreateObject("ADODB.recordset")sql="SELECTB,COUNT(B)ASnFROMtblWHEREc=""2011-11

spring mvc-Spring web MVC问题,麻烦大神们帮忙看看哪里出错了?很急很急!!!!谢谢啦

问题描述 Spring web MVC问题,麻烦大神们帮忙看看哪里出错了?很急很急!!!!谢谢啦 报错日志: java.lang.IllegalArgumentException at org.springframework.asm.ClassReader.(Unknown Source) at org.springframework.asm.ClassReader.(Unknown Source) at org.springframework.asm.ClassReader.(Unknown

js-JS中用getJSON访问一个JSON文件,不知道哪里出错了,能帮忙看看吗

问题描述 JS中用getJSON访问一个JSON文件,不知道哪里出错了,能帮忙看看吗 <!DOCTYPE html> <html> <head> <title>联系人</title> <script src="C:/Users/dell/Desktop/me/jquery/jquery.js" type="text/javascript"></script> </head>

几乎每句都有注释,请帮忙挑挑错,很简单的问题。谢谢

问题描述 我想达到的目的很简单两个list最初list1中c盘下是文件夹list2是c盘下文件接下来只要实现点击list1中任意文件夹list1变化为任意文件夹中的文件夹list2变化为任意文件夹中的文件这种点击可以一直下去只要list1中有文件夹publicNewJFrame(){initComponents();aaa();}privatevoidinitComponents(){}//这里是对于list1list2得设定privatevoidaaa(){//显示文件与文件夹Filef=ne

网站优化写出高质量的软文其实很简单

如有做为一种重要的网站推广方法,受到seor的欢迎,高质量的软文不仅能带来大量流量,而且能带来大量链接,引导蜘蛛光临我们的站点,增加网站权重,因此软文推广是网站优化最好的推广方法.软文推广也是很多seor谈论最难的方法.今天冲浪就谈谈如何写出高质量的软文,其实你会发现,写出高质量的软弱竟然是如此的简单. 1.软文的话题 写软文要找自己熟悉的话题,自己擅长的话题,只有自己在该话题方面知道的多了,有独特的见解,写起来才能游刃有余,挥笔自然.在该话题内,围绕读者最关心的问题,读者心里想的问题,读者需要

运行错误-求c语言大神帮忙看看哪里出错了

问题描述 求c语言大神帮忙看看哪里出错了 #include #include #include struct course { int num; //选题编号 char name[20];//课题名称 char kind[10];//课程性质 int taltime,ttime,etime,mark,term;//课程时间,学分,开课信息 }; struct student { int snum; //学生学号 int cnum; //所选课题编号 char cname[20];//所选课题名称

安卓 网络-啊,跪求啊,第一次跟老师做项目,帮我看一下哪出错了呗,求求各位了,很短的代码

问题描述 啊,跪求啊,第一次跟老师做项目,帮我看一下哪出错了呗,求求各位了,很短的代码 咋回事啊,没反应呢,我本来是做上网站读取数据并解析代码,然后传回手机显示的,但是实现不了,我就先试试到底能不能链接到服务器,发现失败了,怎么回事啊 解决方案 http://www.cnblogs.com/freeliver54/archive/2011/12/28/2304836.html 解决方案二: 哪里有错?可以考虑调试一下 解决方案三: 把错误贴出来吧,代码貌似没问题 解决方案四: 连接百度,,不好搞

压缩感知的大神们,帮帮忙啊,一维信号的MP算法重构,稍微改动了下矩阵,出错了

问题描述 压缩感知的大神们,帮帮忙啊,一维信号的MP算法重构,稍微改动了下矩阵,出错了 clc clear all; close all; M = 64; ? %观测信号长度 N = 256; ?%稀疏信号长度 K = 7; ? %稀疏度 f1=50; ? ?% ?信号频率1 f2=100; ? % ?信号频率2 f3=200; ? % ?信号频率3 f4=400; ? % ?信号频率4 fs=800; ? % ?采样频率 ts=1/fs; ?% ?采样间隔 Ts=1:N; ? % ?采样序列