java题目,线程,弄到现在大脑依旧一片空白的桑不起TUT,求与大神jq的日子帮忙

java题目,线程,弄到现在大脑依旧一片空白的桑不起TUT,求大神帮忙_百度知道
java题目,线程,弄到现在大脑依旧一片空白的桑不起TUT,求大神帮忙
用定义内部runnable 对象的方式,启用两线程,一个输出26个英文字母,一个输出1到26.
提问者采纳
你这个要求不是很明确,看看下边是不是你想要的。-------------------------------------------------------------------public class Input {public static void main(String[] args) {new Thread(new Runnable() {public void run() {char c = 'A';for (int i = 0; i & 26; i++) {System.out.println((char) (c + i));try {Thread.sleep(100);} catch (Exception e) {}}}}).start();new Thread(new Runnable() {public void run() {for (int i = 1; i &= 26; i++) {System.out.println(i);try {Thread.sleep(100);} catch (Exception e) {}}}}).start();}}
提问者评价
好厉害!我做到半夜都没有写出来=W=,谢谢你~
其他类似问题
线程的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁作文题目 健康与利益 800字 求大神帮忙,急!!!!!_百度知道
作文题目 健康与利益 800字 求大神帮忙,急!!!!!
我有更好的答案
按默认排序
遮掩掩下的自身利益至上,是当今世界主流。
这个世界很现实的,虽然欧美一直高呼民主自由,实际上一肚子男盗女娼,从来都是他们自身利益至上。只是不像一百年前那样的赤裸裸,在世界各处公然侵略、杀戮。至于俄罗斯,这个曾经的超级大国,从来都是赤裸裸的利益至上,能占中国便宜的时候从来没有手软过。其实,只要我们稍微认真看看这个世界,就不难认清这个现实。
为什么中国不能很好理解、贯彻国际利益至上?不能理直气壮的在国际上维护自身的利益?自身利益至上不难理解,只要我们放下孔夫子的仁义道德,就很容易发现这个现实真理,中国春秋战国时期各国尔虞我诈,不也是如此吗!
或许从孔夫子的儒家思想普及开始,中国人开始遮遮掩掩,开始要面子,老是讲什么仁义道德。仁义道德当然好,这也是我们要推广的理念,要推广的到中国社会乃至全球人类社会的理想,但千万不要被理想冲昏了头脑,把理想当成了现实就很麻烦了!
孔夫子提出仁义道德,周游列国想推广,结果在各国屡遭挫折,几次性命不保,最后郁郁返回鲁国。当时的客观环境,没有推广儒家思想的空间。到了汉武帝时期,天下一统,外患逐渐消除,儒家思想才逐步推广开来。现在的世界,很类似春秋战国时期,联合国就像软弱的周天子,那有讲认识道德的环境,奉行的是利益至上,儒家思想只能是我们倡导的理想。
把理想当成现实,不仅会丧失实现理想的机会,也会给国家发展、人民生活带来很多麻烦。可惜,许多人至今还没有看清现实,潜意识还沉浸在天朝大国的梦幻中。蒋介石就很典型,在国内为了维护统治不惜采取各种手段,可是对外国还是很讲仁义道德的,比如倡导并推行对日本以怨报德,放弃日本侵华的战争赔偿,结果受苦的是中国人自己。他很像封建王朝的统治者,骨子里还是有天朝仁义道德的思想,姑息日本养虎为患,却让自己人民受苦。鸦片战争以后,中国不再是整个世界(天下),而是弱肉强食的世界上的一个国家,也就丧失了推行儒家思想的大环境—相对统一和谐的世界。
在这个尔虞我诈的世界,儒家思想是我们的理想,讲利益是中国在行动中要真正贯彻的
篇一:我心中的健康校园
说起健康校园的建设活动,我最有体会了。记得二年级时我的体质很差,人也长得又瘦又小,还患有哮喘,经常发烧感冒,以至于影响学习,我烦恼不已。正在这时,学校为了提高全校同学的体质,开展了“健康校园”的建设活动。老师们可没少动脑筋,开展了眼保健操比赛、卫生检查评比、组织各类体育培训班等活动,学校广播也大量播放有关健康的知识,使我们受益匪浅。但让我受益最大的可谓是学游泳的经历了。
我第一次游泳的时候,不仅没有体会到游泳乐趣,还呛了几口水受了很大的惊吓,心里也打起了退堂鼓。回家后还对爸爸发牢骚,“真是的,为什么要学游泳,其他运动不也可以增强体质吗?”爸爸听了说:“经常游泳锻炼可以增加肺活量,改善肺的呼吸功能,对防治哮喘病有很大的帮助。再说做事可不能半途而废,要坚持到底,坚持就是胜利。”想起老师经常教育我们:“做任何事情,只要你有信心,有毅力,就会达到目标。”我默默地点了点头,心里暗暗发誓:可不能遇到挫折就退缩,而应该知难而进。在游泳教练的耐心指导和爸爸妈妈的鼓励下,我终于克服了各种困难,不但学会了蛙泳,还学会了自由泳、仰泳。现在对游泳越来越有兴趣,乐此不疲。
通过两年的游泳锻炼,我的体质有了明显的改善,以往秋冬季节转换时,是我哮喘易发季节,也是爸爸妈妈最担心的季节。今年晚秋的一个晚上,北风呼啸、寒风凛冽,我躺在床上不停地打喷嚏,头也痛得厉害,我的呻吟声惊动了爸爸妈妈,他们一边为我量体温,一边关切地问:“你哪里不舒服?”我有气无力地说:“头痛,还一直咳嗽。”爸爸看过体温表后紧张地说:“不好了,宇宇发烧了。”妈妈听了,急着说:“赶快去医院吧,不要又发哮喘了吧?”到了医院,挂完号,我们走进了诊室。一进房间妈妈就焦急地说:“医生,他晚上突然发烧、不停地咳嗽,是不是又发哮喘了?”医生拿着听筒仔细地听了一会儿,说:“他并没有发哮喘,只是普通的感冒发烧。”听了医生的话,妈妈长长地舒了一口气……。在回家的路上妈妈轻抚着我的头说:“幸好这次没发哮喘,往常只要感冒发烧几乎都会哮喘发作。”我听了,笑眯眯地说:“这次没发哮喘可是游泳的功劳哦。”……
我现在身体比以前健康多了,哮喘也不发了,学习有了很大的进步。通过学校组织的健康校园的建设活动,使我不仅养成锻炼身体的好习惯,还增强了克服困难的意志和毅力。 篇二:远离网吧,健康成长
二十一世纪是一个充满竞争的信息时代。互联网以其丰富的内容、开阔的眼界、快捷的方式,呈现给了我们一个美丽而精彩的崭新世界,使人足不出户就可以在第一时间了解国内外大事,学习各种文化知识等。   然而我们也应该清醒地意识到,网络这把“双刃剑”在给我们带来巨大便利的同时,也带来了巨大的负面影响。由于目前的网络管理还不够规范,网络上既有健康美好的事物,也有低级庸俗的内容,一些自控力较差的学生,难以抵制有害信息的侵蚀,沉溺于网吧,沉迷于网聊、网恋、网络游戏大战中,逐渐变得不守纪律、厌学逃学、夜不归宿,纯洁的心灵受到了毒害,眼睛、身体受到了损害,学习受到了极大的影响,有的甚至走上了违法犯罪的道路。    而且,为了赚钱,为了引诱使学生进入网吧,那些受利益驱动的经营者采取了各种手段,千方百计诱学生进入网吧,根本不顾学生的身心健康。这些网吧设施简陋,没有安全保障,出入人员复杂,经常发生学生伤害事故。 网吧的危害牵动着数以万计父母焦灼的心,也引起了党和国家领导人的高度重视。为了加强对互联网上网服务营业场所的管理,规范经营者的经营行为,维护网民的合法权益,保障互联网上网服务经营活动健康发展,促进社会主义精神文明建设,国务院颁布了《互联网上网服务营业场所管理条例》,其中明令禁止网吧接纳未成年人进入。作为肩负祖国未来建设重任的学生,更应该响应国家号召,用实际行动拥护此条例,把精力投入到学习中去,远离网吧,自主成才,以此来回报祖国及父母的养育之情。   为此,我们特向全校的少年儿童发出以下倡议:   一、严格遵守小学生《守则》、小学生《日常行为规范》,端正自己的言行,加强自我修养。   二、远离网吧,无论是在校学习期间,还是节假日,决不踏进营业性网吧一步,向营业性网吧告别。   三、自觉遵守《全国青少年网络文明公约》,积极倡导文明上网,无论在何时何地上网,都只上一些内容健康、积极向上的绿色网站。   四、自我约束、互相监督,对继续上网吧的同学,我们每个人都有责任和义务对其进行检举和帮助。   五、树立崇高的理想,增强学习的进取心,努力学习科学文化知识,提高辨别是非的能力。同学们,为了我们的身心健康,为了我们的学业成功,为了让我们的老师、父母安心,为了祖国的美好明天,让我们从我做起,告别网吧,远离“网毒”,倡导健康上网观念,不浏览不良信息,不沉溺虚拟时空,珍惜光阴,勤奋学习,树立远大理想,共创一片明净蓝天! 篇三:做一个健康快乐人   在这个变革的年代,动荡的社会里,“我行吗?”这恐怕是生活工作在紧张的现代社会的都市人都曾经面对过的一个问题。   有数字统计,做为一种精神疾病,抑郁症患者在全球已有两亿之众,成为二十一世纪的“流行病”,这意味着我们整个人类将面临着一个共同的难题:战胜自我!   如今,越来越多的都市人都感觉到前所未有的疲惫感和压抑感。这是为什么呢?   从原来的两点一线+一日三餐到现在的上网+快餐方便面,现代人正逐步地改变着原有的生活方式。早晨爬起来是一件很辛苦的事情,晚上累得直不起腰也是一件要命的事,一切从简的现代工薪族惟一能做的事情就是努力努力再努力。在这样的高压状态下,我们只能把温热跳动的心脏换成一颗冰冷坚硬的石头,这样我们才能好好地生存下去,才能不被现实社会压垮,这是我们想要的吗?是我们社会进步的代价吗?   我不知道,也许这是一种生存方式,也是一种必然的选择吧!   要做什么样的人才能适应现代紧张繁忙的社会呢?   心理医生开了一个有效的小处方:   1.敞开心扉,向自己信任的亲朋倾诉自己不佳的心情。   有的时候,我们不高兴并不是因为有一些什么大事情发生,而是一些小积怨堆在心中太久了,形成了心理垃圾,正是因为我们没有时间去清理这些废物,所以导致我们的坏心情,所以找一个适当的机会,向你周围信得过的人发发牢骚,解解闷气,这不失为一种好的方法。   2.给自己订一个合理的生活目标,要切合实际,不要太苛求自己做根本不可能做到的事情。   有的时候,我们常常会做一些傻事,为了远方一个模糊的海蜃蜃楼而乎略了身边很重要的事情,我想做为一个合格的现代人,首先必须了解自己目前的能力,先订一个合理的近期目标,然后在以后的岁月中不断地充实自己,这样我们才能离既定的目标越走越近。   3.锻炼身体。   “身体是革命的本钱”这句话放在现代社会也具有其现实意义,这不仅是从生理上改变一个人,随着时间的推移它必然会在心理上带给我们一些成就感和优越感。
  4.学会享受人生的多种乐趣。   培养一些业余爱好,结交各种各样的朋友。当一个人的人生只有一种选择的时候,他的快乐是也只能是单向选择,这种快乐也是不稳定的。只有能借助多种方式来调节释放自己的人才能适应如此紧张繁忙的现代社会,也是我们中间的聪明人。   因为我们还要好好地活着!所以想要做“Happygirl”、“Happyboy”的现代人,请先从战胜自我开始! 篇四:平安出行,健康一生   夜,出奇的静,雨,无休止的落,打在梧桐树上发出清晰的脆响,又是一个“梧桐更兼细雨,到黄昏,点点滴滴”的夜晚。此时千家万户都亮起了灯,温馨的灯光让人感觉阵阵温暖。每盏灯光的背后,都有一个温暖的故事吧?围着饭桌的一家人都是平平安安的吧?平安和健康那是多少家庭期盼的啊。可是,我们身处这样的世界,每天都有很多无法预料的事情发生。就拿那些在马路上丧生的孩子来说,那些过早凋零的鲜花,让多少家庭饱尝了失去亲人的痛苦,让多少人的一生经历了生离死别的苦难。   每天上学,妈妈都要对我说:“过马路一定要小心啊!”去奶奶家玩,走的时候这也是她一定要说的一句话。开始,我对这些话基本上就是左耳朵进,右耳朵出,照样我行我素,直到我自己亲身经历一场不大不小的车祸之后,我才明白这句话的深刻含义。   那是一个阳光明媚的夏天,望望天,阳光格外的刺眼。我高兴地骑着脚踏车和奶奶一起回家。大概是那天很高兴吧,我一溜烟地骑在了最前面,把奶奶远远得拉在了后面。该过马路了,奶奶在后面提高嗓门直喊:“过马路要小心,左右看一看”“知道了。”我不耐烦地回应了一声,心里直嘀咕:“不就是过一个马路吗?我已经走过成百上千次了,那么紧张干吗?真是罗嗦。”我随便的往两边看了一眼,使劲一蹬脚踏板,飞快地冲了过去。这时,我隐隐约约听见奶奶在后面大声喊:“快停下,后面有车!”我的大脑一下子就是一片空白,只看见不知从哪冒出的一辆白色面包车已经向我冲过来。我躲闪不及,一下子就摔在地上。面包车在我倒地的脚踏车前面一个紧急刹车,车轮和地面的摩擦发出了刺耳的尖叫声,总算在我的身体前面停了下来。奶奶和司机叔叔连忙跑过来,关切地询问我的伤情。奶奶的脸吓得就像一张白纸,哽咽地说:“伤到哪了?伤到哪了?快让我看看,让我看看。”还好,刹车还算及时,我只受了一点轻微的擦伤。此时,我也吓出了一身冷汗,如果叔叔的车再快一点,如果我的前面没有一个脚踏车,如果我骑得再快一些,那么,我简直不敢再想下去了,我第一次深切得体会到平安出行,健康一生是一件多么重要的事情啊。   生命对于我们每个人只有一次,我们的人生才刚刚拉开序幕,还有多少精彩,多少未知等待我们去体验,去追寻。如果我们不珍爱自己的生命,不对我们日日都经过的马路引起足够的重视,不将平安出行作为时时提醒自己的行为准则,那么我们不仅是对自己生命的忽视,而且还会伤害那些我们所爱和爱我们的亲人。同学们,珍爱生命吧,珍爱我们的亲人吧。只有平安出行,才能健康一生! 篇五:愿小树苗健康成长
可爱的孩子们,每当我想到你们,眼前就浮现出那些充满生机的小树苗。你们像小树苗一样,柔软的枝条,嫩绿的叶子,在肥沃的土地上扎根,在和煦的阳光下成长。你们睁着一双惊奇的眼睛观察着:这个世界多么新鲜,多么有趣,多么灿烂!可是,我要提醒你们,狂风暴雨,病虫害,环境污染,都会危害小树的成长。对那些长得歪歪扭扭的小树,还要进行矫正、修剪。同样,社会上的某些坏思想、坏风气和旧的习惯势力,也会污染和危害你们。因此,你们就需要认真学习,接受教育,提高辨别能力,增强抵抗力。要学会在这个纷繁复杂、千变万化的世界上,辨别什么是真的,什么是假的;什么样是美的,什么是丑的;什么是正确的,什么是错误的。这样,你们就会像小树苗一样,长成大树,聚成森林,成为祖国需要的有材。
我国各族人民在中国共产党领导下,正在进行社会主义现代化建设事业,这需要几十年时间和几代人的努力。你们是老一代开创的革命事业的接班人。再过一、二十年,你们将成为建设社会主义现代化强国的主力军。你们要时刻准备着担负起这个光荣的任务。
我想,你们要在思想上、精神上作好准备。实现;四个现代化,不但要有物质力量,还要有精神力量。什么是精神力量呢?就是要热爱社会主义祖国,继承光荣的革命传统;要有共产主义的远大理想,高尚的思想品德,助人为乐的精神和文明礼貌的行为。你们现在开展的&学雷锋、树新风&和&五讲&、&四美&活动就体现了这个方面的起码的要求。希望你们从现在做起,从自己做起。
要刻苦学习文化科学知识。社会主义现代化要求我们要有高度的文化科学知识和聪明智慧。你们要通过学习,掌握古今中外的文化科学知识,并且要准备创造更高的文化科学。
要锻炼身体。要从小养成卫生习惯,特别要注意保护眼睛。人从小锻炼身体,增强体质,获得充沛的精力。要从小养成活泼开朗的性格。艰巨的工作在等待着你们,没有健康的身体,充沛的精力是担当不起这个任务的。
还要有健康的文化艺术修养。对文学艺术要有鉴赏力。优美的音乐、美术、文学等对陶冶性情起着重要作用,能够抵制那些不健康的有害的东西,养成优美高尚的情操。
我们正在大力进行绿化祖国的工作,也正在对三亿以上少年儿童进行培养教育工作。我想象着葱绿的大地和鲜艳的红领巾将把祖国点缀得更加美丽多姿,更加欣欣向荣。愿你们和小树苗一同成长,成长得挺拔、旺盛,经得起任何暴风雨和病虫害的考验,成长为栋梁之材,成长为社会主义现代化建设事业的坚强接班人,为创造更高的物质文明和精神文明做出超过前人的巨大贡献。 篇六:禁毒健康成就未来   常言说:“生命只有一次,一旦失去,就无法挽回。”然而,有些人却不把生命当一回事,在毒品的虚幻梦境中,不知不觉地断送了自己宝贵的生命,在毒品漫延的历史长河中,演绎了一幕又一幕的悲剧!   在18世纪70年代起,英国公司为了钱,把鸦片偷偷运输到中国,使我国的贵族大官瘾上毒瘾,让清朝政府更加腐败无能。   知道吗?有人为了它,出卖了自己的灵魂和身体。为了它杀人,抢劫,偷窃。我曾经看过一篇报道:在江苏省的李某,瘾上了毒瘾,却没钱买毒品,他便向多年的挚友借钱,他一而再,再而三地向挚友借钱,可挚友因为忍受不了他的吸毒行为,便断然地一次次拒绝。李某一上毒瘾,又没有毒品供应,便狠了心,拿起菜刀将他的挚友杀了,还把挚友的血卖了换成钱买毒品。那被害人的血,一滴一滴地沁,入了我的心。吸毒者为了毒品,而戴上“杀人犯”的帽子。   据资料显示,我国最小的吸毒者只有11岁,未成年人占了全部的75%!未成年人是最容易感染毒品的群体,又是受害最深的对象,所以国家高度重视和关注未成年人,提出“禁毒宣传,要从孩子抓起”的号召……   有一个叫王敬的初中生,染上了毒品,父母痛苦万分,工作没有精神,常常心不在焉,忧心忡忡,原来的笑容从脸上消失得无影无踪,只留下一脸的忧愁和悲哀,原来温馨的家庭和欢声笑语也消失了,只留下争吵和哭泣。   王敬本来是一个品学兼优的好学生,深受老师的喜爱,同学们也很喜欢跟他一起玩,他也爱乐于助人,常常帮助一些成绩不好的同学。全家人都为他而自豪骄傲,妈妈和邻居交谈时总会夸一夸他,经常都谈到眉飞色舞,哈哈大笑。   自从他认识了一个网友以后,他完完全全地变了。那位网友是一位吸毒者,因为被别人陷害而染上毒品的,于是他不甘心,不断地怂勇网友吸毒,王敬也成了其中的受害者。   从此王敬不断向家人要钱买毒品。最后,家里的钱几乎都被他花光了,无可奈何之下,王敬只好去偷同学的钱,到人多的街上抢别人的包,就在一次抢劫中被警察当场抓获,被送进了劳教所。就这样,他美好的前途失去了,才华也被毒品扼杀了。   生命只此一次,它不能轮回,不能重现。所以我们一定要远离毒品,认识毒品。养成良好的行为习惯,生活习惯,培养健康的生活情趣共同筑起一道防毒,识毒,拒毒的新长城,形成人人参与禁毒的态势,扫除毒魔。   来吧,青少年们,让我们共同抵制毒品,参与禁毒,一起向毒品宣战,成就健康,美好的未来! 篇七:珍惜健康   不珍惜健康的人,是因为他们不明白健康的可贵;不珍惜健康的人,是因为他们不曾经失去过健康;不珍惜健康的人,是因为他们未曾重视过健康!虽然健康常常不打声招呼就出了门,但你只要重视它、呵护它,总有一天,他会自己回来的。   记得是三年级的时候,班上盛行水痘,而体制本身就不大好的我,也不幸中招了。记得那时是早上发觉身子痒。下午,妈妈赶紧带我去医院检查,检查时才发现我的胸前、背部,都长满了红豆一般大小的痘痘,才知道得了水痘。看着妈妈那着急的表情,我不以为然:不就是水痘么,还可以休息两周呢。谁知,厄运才刚刚开始。   医生说:“注意在这两周期间,不要吃海鲜。”晚上一回到家,我就闻到了一阵扑鼻的香气,哈,是外婆给煮我最爱吃的香辣蟹了。我满怀期待奔向了餐桌。“什么?水痘?”外婆听到消息以后,叹了口气,“唉——,真可惜。”外婆摇了摇头。吃饭时,看着其他人在哪里有滋有味地吃饭,看了特地为我准备的清粥小菜,有看了那鲜红的香辣蟹壳,一层薄薄的油在上面透着一层亮光,一条条红辣椒穿插在蟹肉上,让人垂涎三尺。再加上那扑鼻而来的辣香,这种菜,不要说吃了,就是看着都解馋了。算啦算啦,等好了再叫外婆给我做吧。   晚上,我躺在床上,后背是一阵奇痒,翻过来手臂也是奇痒无比,“即使是痒也不能挠,不然就会破皮的。”妈妈的话在我耳边回响。我翻来覆去,索性就掀开被子,做到了床头,随手抓起一本书来看。不过一会,我就觉着小腿隐隐作痛。原来是我在看书时,手不自觉的去挠小腿上的痘痘,把痘痘挠破了,出了点血,后来还留了一个疤。我又躺会床上,进行自我安慰:没事的,乐观一点,总会过去的。更悲惨的还在后边呢。   第二天早上,我醒来时父母已经去上班了,家里只剩下了我一个人了。吃过饭后,我便在家里东逛逛,西荡荡,晃荡来,晃荡去。半天才想起看电视,可这点也没什么好节目,不到十分钟,便“啪”的一声关掉了电视。打开电脑,看到一排排灰色的头像,往日那吵得令人烦的QQ群上也没有一个人。哎,好无聊。我又想起了那昔日的课堂,那熟悉的教室,那些亲近的同学,顿时觉得好孤单……   经过了两周煎熬后的我,终于回到了那向往的教室,看到了同学们还是那么亲近,我的心里轻松了许多。   我在这里感叹:朋友,珍惜你的健康吧,不要等它已追不回来时,才懊悔。实际上,不只是健康,其他的、友谊、挫折、包括水资源,也不应该珍惜么?不要等这些东西失去后,才体会到他们的宝贵。不要等这些东西失去后,才来追悔莫及! 篇八:心系祖国,健康成长
有一位亲人——比母亲更亲,那就是祖国。
中国,我们伟大的祖国,屹立在世界的东方。有着5000年悠久历史和文化传统的中华民族,正张开铁的臂膀,正迈着矫健的步伐,踏着时代的旋律,走向世界,走向未来。我为自己是一个龙的传人而感到骄傲,为自己是一名炎黄子孙而感到自豪!对我来说,祖国是神圣的,是不可侵犯的,我爱她的河山,爱她的人民,爱她的历史,爱她的文化。
中华民族是个不屈的民族。中华儿女英勇奋战,团结一致对抗外来侵略者。鸦片战争、抗日战争等等不一而足。中华民族是个积极进取的民族。改革开放带动了体育事业的飞速发展,中国体育健儿没有辜负祖国人民的期望,奋力拼搏,为祖国夺回一枚枚闪亮的金牌;神舟5号载人飞船升上太空,成为中国航天史上的一次壮举,使我国成为世界上第三个掌握载人航天技术的国家。一次又一次的成功都证明:中国早已不是什么“东亚病夫”,而是正在掘起的东方巨人!
我们少年儿童是祖国的花朵,是祖国的明天,我们的健康成长关系着整个民族的兴旺发达。我们只有心系祖国、勤奋刻苦,才能担负起建设祖国的重任,报效祖国。
要心系祖国就要从增强爱国情感做起。我们的祖国是世界瞩目的巨人,现在,中国已经站起来了,摆脱了贫穷和侵略者的欺压,毫无愧色的站了起来!中国——这条沉睡初醒的巨龙,惊动了世界!作为这条巨龙的传人,作为一个黑头发黑眼睛黄皮肤的中国人,能不为此感到骄傲自豪吗?   要心系祖国就要从确立远大志向做起。“身无半文,心忧天下”的毛主席说过:“应该为了寻求救国救民的真理,为了改造国家和社会而发奋学习。”我们的祖国已经取得了伟大的成就,祖国的前程无比灿烂,祖国的未来无比辉煌,我们少先队员要确立远大志向:将来做建设祖国的有用人才,作社会主义的有理想、有道德、有文化、有纪律的“四有”新人。
要心系祖国就要从规范行为习惯做起。要时刻以“读好书、写好字、好题、画好画、唱好歌、做好操、说好话、作好文、扫好地、行好礼”这“十好”做一把尺子,用它来规范自己,用它来衡量自己,用它来严格要求自己,争取做一个爱国守法、明礼诚信、团结友善、勤俭自强、敬业奉献的好少年。
要心系祖国就要从提高基本素质做起。基本素质,就是要具有创新识、进取精神、科学精神、民主法制观念、劳动观念、自主能力和自我保护能力。从我做起,从一点一滴做起提高基本素质,促进全面发展。
同学们,让我们在人生大舞台上高唱起来,向着“心系祖国,健康成长”的光辉目标,前进!
其他类似问题
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁C语音读取WAV文件,头文件中DataID为空,求大神帮忙见见_Java线程封闭:代码实战总结_Objective-C怎么使用对象集合学习系列之一__脚本百事通
稍等,加载中……
^_^请注意,有可能下面的2篇文章才是您想要的内容:
C语音读取WAV文件,头文件中DataID为空,求大神帮忙见见
Java线程封闭:代码实战总结
Objective-C怎么使用对象集合学习系列之一
C语音读取WAV文件,头文件中DataID为空,求大神帮忙见见
C语音读取WAV文件,头文件中DataID为空,求大神帮忙看看c语言写的一个读取wav音频文件的小程序,调试发现DataID内容为空,但应该为'data',不知道原因,音频文件为一首wav的歌曲,代码如下:
#include&stdio.h&
#include&stdlib.h&
#include &STRING.H&
#include&math.h&
typedef short DWORD;
struct WavHead
char ChunkID[4]; //ChunkID is "RIFF'
DWORD C //RIFF WAVE Chunk 大小
char ChunkType[4]; //Yype is 'WAVE'
//char Format[4];
char FormatID[4]; //FORmatID IS 'fmt'
int F//编码方式,一般为0x0001
short ChannelN //声道数目,1--单声道;2--双声道
long SampleP //采样频率
long AveByteP //每秒平均字节数
short BitsperS//每个采样点的bit
char FactID[4]; //FactID is 'fact'
long FactD
char DataID[4];//DataId is 'data'
long DataS
long SubChun2S
//long SampleN
//void wave_generator(FILE *fpwav, wav_pcm_header44 *phwav);
int main()
FILE *fpwav = NULL;
struct WavHead hWAV;
fpwav = fopen("test.wav","rb");
if(fpwav == NULL)
printf("fail to open file");
return -1;
printf("open ok\n");
fread(&hWAV, sizeof(WavHead), 1, fpwav);
printf("fread head ok\n");
printf("%s\n",hWAV.DataID);
if ((0 == memcmp(hWAV.ChunkID,"RIFF",4))&&(0 == memcmp(hWAV.FormatID,"fmt",4),4)&&(0 == memcmp(hWAV.DataID,"data",4)))
printf("wave audio data format:\n");
printf("Channel num:%d\n",hWAV.ChannelNum);
printf("SampleRate:%dHz\n",hWAV.SamplePersec);
printf("BitesperSample:%d bits\n",hWAV.AveBytePersec);
//printf("audio data size : %d",)
fclose(fpwav);
fpwav = NULL;
}------解决方案--------------------定义结构体之前配置:
#pragma pack(1)
就是紧凑模式,这样字段就会一个一个的挨着放。
否则的话,编译器会在一些字段后面插入空的字节,用来对齐,以实现较高的处理效率。
怎样才是紧凑模式呢?如果设定对齐方式,该设定多少字节对齐呢?求大神详细解释下了。
Quote: 引用:
结构体要用紧凑模式,不然又会字节对齐的问题:
#pragma pack(1)
Quote: 引用:
c语言写的一个读取wav音频文件的小程序,调试发现DataID内容为空,但应该为'data',不知道原因,音频文件为一首wav的歌曲,代码如下:
#include&stdio.h&
#include&stdlib.h&
#include &STRING.H&
#include&math.h&
typedef short DWORD;
struct WavHead
char ChunkID[4]; //ChunkID is "RIFF'
DWORD C //RIFF WAVE Chunk 大小
char ChunkType[4]; //Yype is 'WAVE'
//char Format[4];
char FormatID[4]; //FORmatID IS 'fmt'
int F//编码方式,一般为0x0001
short ChannelN //声道数目,1--单声道;2--双声道
long SampleP //采样频率
long AveByteP //每秒平均字节数
short BitsperS//每个采样点的bit
char FactID[4]; //FactID is 'fact'
long FactD
char DataID[4];//DataId is 'data'
long DataS
long SubChun2S
//long SampleN
//void wave_generator(FILE *fpwav, wav_pcm_header44 *phwav);
int main()
FILE *fpwav = NULL;
struct WavHead hWAV;
fpwav = fopen("test.wav","rb");
if(fpwav == NULL)
printf("fail to open file");
return -1;
printf("open ok\n");
fread(&hWAV, sizeof(WavHead), 1, fpwav);
printf("fread head ok\n");
printf("%s\n",hWAV.DataID);
if ((0 == memcmp(hWAV.ChunkID,"RIFF",4))&&(0 == memcmp(hWAV.FormatID,"fmt",4),4)&&(0 == memcmp(hWAV.DataID,"data",4)))
printf("wave audio data format:\n");
printf("Channel num:%d\n",hWAV.ChannelNum);
printf("SampleRate:%dHz\n",hWAV.SamplePersec);
printf("BitesperSample:%d bits\n",hWAV.AveBytePersec);
//printf("audio data size : %d",)
fclose(fpwav);
fpwav = NULL;
------解决方案--------------------wav由若干个块组成,不一定马上就是fmt,也不一定有fact,分析应该时循序读入4byte块名+4byte块的大小,然后推敲出下一个块的位置,多声道的话fmt块也不是你列出的那种格式,所以先找格式规范看看先...------解决方案--------------------参考C:\windows_2000_source_code\win2k\private\windows\shell\control\mmsys\sound.c...
STATIC MMRESULT NEAR PASCAL soundInitWaveHeader(
size_t cbWFX;
ULPWAVEFORMATEX
ULPCHUNKHEADER
LPFILEHEADER
if (ps-&cbLength & sizeof(FILEHEADER))
return MMSYSERR_INVALPARAM;
pfhdr = (LPFILEHEADER)ps-&pbD
if ((pfhdr-&fccRiff != RIFF_FILE) ------解决方案-------------------- (pfhdr-&fccWave != RIFF_WAVE))
return MMSYSERR_NOTSUPPORTED;
dwFileSize = pfhdr-&cbS
dwCurPos = sizeof(FILEHEADER);
pbData = (LPBYTE)ps-&pbData + sizeof(FILEHEADER);
if (ps-&cbLength & dwFileSize)
return MMSYSERR_INVALPARAM;
pckhdr = (ULPCHUNKHEADER)pbD
if (pckhdr-&dwCKID == RIFF_FORMAT)
dwCurPos += pckhdr-&dwSize + sizeof(CHUNKHEADER);
if (dwCurPos &= dwFileSize)
return MMSYSERR_INVALPARAM;
pbData += pckhdr-&dwSize + sizeof(CHUNKHEADER);
pwfx = (ULPWAVEFORMATEX)(pbData + sizeof(CHUNKHEADER));
cbWFX = sizeof(WAVEFORMATEX);
if (pwfx-&wFormatTag!=WAVE_FORMAT_PCM)
cbWFX += pwfx-&cbS
if ((ps-&lpwfx = (LPWAVEFORMATEX)GlobalAlloc (GMEM_FIXED, cbWFX)) == 0)
return MMSYSERR_NOMEM;
memcpy ((char *)ps-&lpwfx, pwfx, cbWFX);
pbData = pbData + ((ULPCHUNKHEADER)pbData)-&dwSize + sizeof(CHUNKHEADER);
pckhdr = (ULPCHUNKHEADER)pbD
if (pckhdr-&dwCKID == RIFF_DATA)
dwCurPos += pckhdr-&dwSize + sizeof(CHUNKHEADER);
if (dwCurPos &= dwFileSize)
GlobalFree ((HGLOBAL)ps-&lpwfx);
ps-&lpwfx = NULL;
return MMSYSERR_INVALPARAM;
pbData += pckhdr-&dwSize + sizeof(CHUNKHEADER);
ps-&header.lpData = pbData + sizeof(CHUNKHEADER);
ps-&header.dwBufferLength = pckhdr-&dwS
ps-&header.dwBytesRecorded = 0;
ps-&header.dwUser = (DWORD_PTR)
ps-&header.dwFlags = 0;
ps-&header.dwLoops = 0;
ps-&header.lpNext = NULL;
ps-&header.reserved = 0;
return MMSYSERR_NOERROR;
STATIC MMRESULT NEAR PASCAL soundLoadFile(
hwndNotify,
if ((hf = HandleToUlong(CreateFile(pszSound,GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL))) != HFILE_ERROR)
ps-&cbLength = _llseek(hf, 0L, SEEK_END);
_llseek(hf, 0L, SEEK_SET);
if (ps-&hgData = GlobalAlloc(GMEM_MOVEABLE ------解决方案-------------------- GMEM_SHARE, ps-&cbLength))
if (ps-&pbData = GlobalLock(ps-&hgData))
if (_hread(hf, ps-&pbData, ps-&cbLength) == (LONG)ps-&cbLength)
if (!(mmr = soundInitWaveHeader(ps)))
_lclose(hf);
ps-&hwndNotify = hwndN
return MMSYSERR_NOERROR;
mmr = MMSYSERR_ERROR;
GlobalUnlock(ps-&hgData);
mmr = MMSYSERR_ERROR;
GlobalFree(ps-&hgData);
mmr = MMSYSERR_NOMEM;
_lclose(hf);
mmr = MMSYSERR_ERROR;
...------解决方案--------------------#include&stdio.h&
#include&stdlib.h&
#include&string.h&
#include&math.h&
#pragma pack(1)
struct WavHead_ {
char ChunkID[4]; //ChunkID is "RIFF'
unsigned int C //RIFF WAVE Chunk 大小
char ChunkType[4]; //Yype is 'WAVE'
//char Format[4];
char FormatID[4]; //FORmatID IS 'fmt'
int F//编码方式,一般为0x0001
int ChannelN //声道数目,1--单声道;2--双声道
int SampleP //采样频率
int AveByteP //每秒平均字节数
short BitsperS//每个采样点的bit
char FactID[4]; //FactID is 'fact'
char DataID[4];//DataId is 'data'
long DataS
//long SampleN
//void wave_generator(FILE *fpwav, wav_pcm_header44 *phwav);
int main() {
FILE *fpwav = NULL;
struct WavHead_ hWAV;
fpwav = fopen("test.wav","rb");
if(fpwav == NULL) {
printf("fail to open file");
return -1;
printf("open ok\n");
fread(&hWAV, sizeof(WavHead), 1, fpwav);
printf("fread head ok\n");
printf("%s,%s,%s,\n",hWAV.DataID,hWAV.FactID,hWAV.ChunkType);
if ((0 == memcmp(hWAV.ChunkID,"RIFF",4))&&(0 == memcmp(hWAV.FormatID,"fmt",4),4)&&(0 == memcmp(hWAV.DataID,"data",4))) {
printf("wave audio data format:\n");
printf("Channel num:%d\n",hWAV.ChannelNum);
printf("SampleRate:%dHz\n",hWAV.SamplePersec);
printf("BitesperSample:%d bits\n",hWAV.AveBytePersec);
//printf("audio data size : %d",)
fclose(fpwav);
fpwav = NULL;
}修改后的,可能会有问题,需认真对比wav的数据结构。
输出:open ok
fread head ok
data串,fact,WAVEfmt ,
wave audio data format:
Channel num:22050
SampleRate:44100Hz
BitesperSample:1048578 bits
Java线程封闭:代码实战总结
Java线程关闭:代码实战总结1.Thread.stop和suspend避免使用,容易造成死锁等不可意见的问题。
2.public class Thread {
public void interrupt();
public boolean isInterrupted();
public static boolean interrupted(); // 仅清除当前线程的中断状态,并返回之前的值。清除中断状态的唯一方法
3.调用interrupt并不意味着必然停止目标线程正在进行的工作,而是传递请求中断的消息。
4.处理InterruptedException:传递异常(使用throws声明),或者保持中断状态,上次调用栈的代码再处理。
 Java线程关闭,总的来说有3种:
  1.使用状态位,这个简单,就不多说了:
  public class Task extends Thread {
  private volatile boolean flag=
  public void stopTask() {
  flag =
  @Override
  public void run() {
  while(flag){
  /* do your no-block task */
  2.当线程等待某些事件发生而被阻塞,又会发生什么?当然,如果线程被阻塞,它便不能核查共享变量,也就不能停止。这在许多情况下会发生,例如调用 Object.wait()、Thread.sleep等,这里仅举出一些。他们都可能永久的阻塞线程。即使发生超时,在超时期满之前持续等待也是不可行和不适当的,所以,要使用某种机制使得线程更早地退出被阻塞的状态。这个时候你可以使用Thread.interrupt();
  public class BlockTask extends Thread {
  @Override
  public void run() {
  while (!Thread.interrupted()) {
  /* do your block task*/
  } catch (Exception e) {
  e.printStackTrace();
  但是上面的代码或许有些不妥,或许用例子更能把问题说清楚。你怎么知道该代码段会发生阻塞?interrupt()函数到底是什么意思呢?首先说明的是,interrupted()方法只能解决跑出InterruptedException异常的阻塞。而interrupt()并不是关闭阻塞线程,而是解除阻塞。那这里就举出一个关闭线程阻塞的例子:
  1 public class BlockTask extends Thread {
  2 @Override
  3 public void run() {
  4 try {
  5 sleep(10000);
  6 } catch (InterruptedException e) {
  7 System.out.println("if yout use interrupt you will see me");
  11 public static void main(String[] args)throws Exception {
  12 // TODO Auto-generated method stub
  13 BlockTask task = new BlockTask();
  14 task.start();
  15 Thread.sleep(1000);
  16 task.interrupt();
  3.上面说了,interrupt()只能解决InterruptedException的阻塞的线程,那么遇到一些其他的io阻塞怎么处理呢?这个时候java都会提供相应的关闭阻塞的办法。例如,服务器可能需要等待一个请求(request),又或者,一个网络应用程序可能要等待远端主机的响应,这个时候可以使用套接字close()方法
  1 public class SocketTask extends Thread {
  2 private volatile ServerS
  4 public void stopTask(){
  5 try {
  6 if(server!=null){
  7 server.close();
  8 System.out.println("close task successed");
  10 } catch (IOException e) {
  11 System.out.println("close task failded");
  14 @Override
  15 public void run() {
  16 try {
  17 server = new ServerSocket(3333);
  18 } catch (IOException e) {
  19 e.printStackTrace();
  23 public static void main(String[] args) throws InterruptedException {
  25 SocketTask task = new SocketTask();
  26 task.start();
  27 Thread.sleep(1000);
  28 task.stopTask();
Objective-C怎么使用对象集合学习系列之一
Objective-C如何使用对象集合学习系列之一
本章介绍如何通过 框架使用 处理数组与字典。本章内容:
与 创建数组
在数组中添加、删除与插入对象
数组的搜索与排序
通过不同方式遍历数组
将数组的内容保存到文件系统中
与 创建字典
在字典中添加与删除对象
通过不同方式遍历字典
将字典的内容保存到文件系统中
与 创建集合
根据对象内容比较集合
通过不同方式遍历集合
在集合中添加与删除对象
在 中有 类对象集合:数组、字典与集合。到底使用哪种集合取决于应用的需要。
数组在列表中组织对象,列表通过整数进行索引。
字典通过键组织对象;字典中的每个对象都与某个键相关联,可以通过键检索对象。
集合包含对象,但不要假定这些对象以一定的顺序排列。集合中的对象也必须是
唯一的不能重复。从集合中检索对象是非常快的,因为集合没有索引带来的系统开销。因此,你会看到在需要考虑性能的场合下会用到集合。
3.1创建数组
应用需要在列表中组织对象。
提供了两个 类来创建对象列表,它们分别是 与。如果列表不需要改变,那么请使用
类;如果要向数组添加和删除对象,那么请使用 类。
在 中,数组的创建与其他对象类似:使用 与 构造函数,或者使用诸如 之类的便捷函数创建数组。如果使用
创建数组,那么一旦数组创建完毕,就无法再进行修改。使用 创建的数组可以在后面修改。
下面的示例展示了如何创建字符串数组:
NSArray *listOfLetters = [NSArray arrayWithObjects:@"A", @"B", @"C", nil];
在使用 创建数组时,需要传递使用逗号分隔的对象列表并以
结束。该例使用了 对象,但对于 与 来说,可以使用任何对象,包括从自定义类实例化得来的对象。
如果使用 ,那么可以通过相同的构造函数来创建数组是
的子类。如果后面还要向数组中添加对象,那么还可以通过
与 来创建 对象。表 列出了 与 类的完整构造函数列表,程序清单 列出了相关的代码。
程序清单3-1
#import &Foundation/Foundation.h&
int main (int argc, const char * argv[]){
@autoreleasepool {
NSArray *listOfLetters1 = [NSArray arrayWithObjects:@"A", @"B", @"C", nil];
NSLog(@"listOfLetters1 = %@", listOfLetters1);
NSNumber *number1 = [NSNumber numberWithInt:1];NSNumber *number2 = [NSNumber numberWithInt:2];NSNumber *number3 = [NSNumber numberWithInt:3];
NSMutableArray *listOfNumbers1 = [[NSMutableArray alloc]initWithObjects:number1, number2, number3, nil];
NSLog(@"listOfNumbers1 = %@", listOfNumbers1);
id list[3];
list[0] = @"D";
list[1] = @"E";
list[2] = @"F";
NSMutableArray *listOfLetters2 = [[NSMutableArray alloc]initWithObjects:list
NSLog(@"listOfLetters2 = %@", listOfLetters2);}
return 0;}
要想使用上述代码,请从 构建并运行 应用。通过日志查看每个数组的内容。接下来的攻略将会介绍如何引用这些数组元素,这样就可以将它们的内容打印到日志或是在程序的其他地方使用它们了。
3.2 引用数组中的对象
你想要获得指向数组中对象的引用以访问它们的属性或是向对象发送消息。
可以使用 方法获取数组中位于某个整数位置的对象引用,还可以通过函数获取数组中最后一个对象的引用。
在列表中组织对象,列表通过以 开始的整数进行索引。如果你想要获得数组中某个对象的引用并且知道这个对象的位置,那么可以通过
方法获得指向这个对象的引用:
NSString *stringObject1 = [listOfLetters objectAtIndex:0];
通过函数 可以快速获得数组中最后一个对象的引用:
NSString *stringObject2 = [listOfLetters lastObject];
通常情况下,你并不知晓对象在数组中的位置。如果已经获得对象的引用,那么可以通过
函数并且将对象引用作为参数来获得对象在数组中的位置:
NSUInteger position = [listOfLetters indexOfObject:@"B"];
参见程序清单 。代码
程序清单3-2
import &Foundation/Foundation.h&
int main (int argc, const char * argv[]){
@autoreleasepool {
NSMutableArray *listOfLetters = [NSMutableArray
arrayWithObjects:@"A", @"B", @"C", nil];
NSString *stringObject1 = [listOfLetters objectAtIndex:0];NSLog(@"stringObject1 = %@", stringObject1);
NSString *stringObject2 = [listOfLetters lastObject];NSLog(@"stringObject2 = %@", stringObject2);
NSUInteger position = [listOfLetters indexOfObject:@"B"];NSLog(@"position = %lu", position);
return 0;}
要想使用上述代码,请从 构建并运行 应用。从控制台输出可以看到,对象已被成功引用:
stringObject1 = A
stringObject2 = C
position = 1
3.3 获取数组中元素的数量
应用使用数组中的内容,你需要知道数组中有多少个元素以便恰当地展现内容。
对象提供了 属性,可以通过这个属性获得数组中元素的数量。说明
要想使用 属性,可以对任何数组对象使用点符号或是发送
消息以获得数组中元素的数量。参见程序清单
程序清单3-3
#import &Foundation/Foundation.h&
int main (int argc, const char * argv[]){
@autoreleasepool {
NSMutableArray *listOfLetters = [NSMutableArray
arrayWithObjects:@"A", @"B", @"C", nil];NSLog(@"listOfLetters has %lu elements", listOfLetters.count);
return 0;}
要想使用上述代码,请从 构建并运行 应用。日志消息会显示出元素的数量:
listOfLetters has 3 elements
3.4 遍历数组
你拥有对象数组,想要向数组中的每个对象发送同样的消息或是访问同样的属性。
对象提供了 种内置方式来遍历对象列表。很多人都使用 循环遍历数组中的每个元素。通过这种结构,可以使用相同的代码来遍历数组中的每个元素。
还可以使用 方法,在这种情况下,可以传递希望每个对象都执行的方法名和一个参数。
最后,还可以通过 方法将代码块作为参数应用到数组中的每个对象上。该方法的作用与
循环一样,但无须为循环本身编写代码,并且可以通过参数追踪当前元素的索引。
由于该攻略需要一些示例,因此创建 个 对象并放到新的数组中:
NSMutableString *string1 = [NSMutableString stringWithString:@"A"];NSMutableString *string2 = [NSMutableString stringWithString:@"B"];NSMutableString *string3 = [NSMutableString stringWithString:@"C"];
NSArray *listOfObjects = [NSArray arrayWithObjects:string1, string2,string3, nil];
要想使用 循环遍历 数组,需要创建循环并提供局部变量,局部变量可以引用数组中的当前对象。你还需要添加代码供列表中的每个对象执行:
for(NSMutableString *s in listOfObjects){
NSLog(@"This string in lowercase is %@", [s lowercaseString]);
循环遍历数组中的每个可变字符串并将消息写到日志中。是类的成员函数,能以小写形式返回字符串。
无需通过 循环就可以向数组中的每个对象发送消息,方式是发送消息。需要将关键字传递到方法中并将方法名放到圆括号中。在属性修饰 的后面传递参数值:
[listOfObjects makeObjectsPerformSelector:@selector(appendString:)withObject:@"-MORE"];
这里所做的是向数组中的每个可变字符串发送 消息以及字符串参数
。现在,每个字符串最终都会被修改,其中包含了额外的字符。
可以使用块定义应用到数组中的每个对象的代码块。块是一种代码封装方式,这样一来,代码就可以被当作对象,并以参数形式传递给其他对象。借助于
方法,就可以对数组中的每个元素执行代码块:
[listOfObjects enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){
NSLog(@"object(%lu)'s description is %@",idx, [obj description]);}];
这与 循环的作用一样,但你只需要使用一行代码即可。此外,块还为需要引用的对象提供了内置参数和索引以帮助你追踪当前在数组中的位置。该例通过块并使用对象的
函数与 参数,针对列表中的每个对象向日志中写入了一条消息。参见程序清单
程序清单3-4
#import &Foundation/Foundation.h&
int main (int argc, const char * argv[]){
@autoreleasepool {
NSMutableString *string1 = [NSMutableString stringWithString:@"A"];NSMutableString *string2 = [NSMutableString stringWithString:@"B"];NSMutableString *string3 = [NSMutableString stringWithString:@"C"];
NSArray *listOfObjects = [NSArray arrayWithObjects:string1, string2,string3, nil];
for(NSMutableString *s in listOfObjects){
NSLog(@"This string in lowercase is %@", [s lowercaseString]);
[listOfObjects makeObjectsPerformSelector:@selector(appendString:)withObject:@"-MORE"];
[listOfObjects enumerateObjectsUsingBlock:^(id obj, NSUInteger idx,BOOL *stop) {
NSLog(@"object(%lu)'s description is %@",idx, [obj description]);}];
return 0;}
确保数组中的对象可以响应你所发出的消息。如果向数组中的对象发送它们无法响应的消息,那么程序就会崩溃,你会收到一条错误消息—
要想使用上述代码,请从 构建并运行 应用。日志消息会显示出对之前所创建数组应用各种遍历方式后的结果:
This string in lowercase is a
This string in lowercase is b
This string in lowercase is c
object(0)'s description is A-MORE
object(1)'s description is B-MORE
object(2)'s description is C-MORE
3.5 排序数组
你使用数组来组织自定义对象,希望对象按照各自属性值的顺序出现在列表中。
为用于数组排序的每个属性创建 对象,将所有这些 对象放到一个数组中,该数组将会在后面用作参数。使用
类的 方法并将
对象数组作为参数传递进去,结果会返回一个数组,这个数组中的对象已根据你指定的属性排好序。
本攻略会使用到 对象。程序清单 展示了 对象的类定义。虽然可以通过该攻略对字符串或数字对象排序,但只有当你使用
处理自定义对象时,才会真正感受到它的强大功能。
自定义类叫做 ,它有
个属性,分别是 、与 。类还有两个方法,分别是 与 ,后者是自定义构造函数。
首先,创建 对象数组:
//Instantiate Person objects and add them all to an array:Person *p1 = [[Person alloc] initWithFirstName:@"Rebecca"
lastName:@"Smith"
andAge:33];
Person *p2 = [[Person alloc] initWithFirstName:@"Albert"lastName:@"Case"
andAge:24];
Person *p3 = [[Person alloc] initWithFirstName:@"Anton"
lastName:@"Belfey"
andAge:45];
Person *p4 = [[Person alloc] initWithFirstName:@"Tom"
lastName:@"Gun"
andAge:17];
Person *p5 = [[Person alloc] initWithFirstName:@"Cindy"lastName:@"Lou"
andAge:6];
Person *p6 = [[Person alloc] initWithFirstName:@"Yanno"
lastName:@"Dirst"
andAge:76];
NSArray *listOfObjects = [NSArray arrayWithObjects:p1, p2, p3, p4, p5, p6,
如果打印数组中的每个元素,对象就会以你将它们放到数组中时的顺序出现。如果想要根据每个人的年龄、姓与名排序数组,那么可以使用
对象。需要为用于排序的每个 属性提供排序描述符:
//Create three sort descriptors and add to an array:
NSSortDescriptor *sd1 = [NSSortDescriptor sortDescriptorWithKey:@"age"
ascending:YES];
NSSortDescriptor *sd2 = [NSSortDescriptor sortDescriptorWithKey:@"lastName"ascending:YES];
NSSortDescriptor *sd3 = [NSSortDescriptor sortDescriptorWithKey:@"firstName"ascending:YES];
NSArray *sdArray1 = [NSArray arrayWithObjects:sd1, sd2, sd3, nil];
需要将属性名以字符串的形式传递进去并指定根据属性进行升序还是降序排序。最后,所有排序描述符需要放在数组中。
数组中每个排序描述符的位置决定了对象的排序顺序。因此,如果希望数组先根据年
龄,然后根据姓进行排序,那么确保先将与年龄对应的排序描述符添加进来,然后再将与
姓对应的排序描述符添加进来。
要想获得排好序的数组,请向待排序的数组发送 消息并将排序描述符数组作为参数传递进来:
NSArray *sortedArray1 = [listOfObjects sortedArrayUsingDescriptors:sdArray1];
要想查看结果,请使用 方法将排好序的数组中的每个对象的状态输出到日志中:
[sortedArray1 makeObjectsPerformSelector:@selector(reportState)];
这会以排序描述符年龄、姓、名指定的顺序将每个
对象的详细信息打印到日志中。参见程序清单 ~。
程序清单3-5
#import &Foundation/Foundation.h&
@interface Person : NSObject
@property(strong) NSString *firstN
@property(strong) NSString *lastN
@property(assign)
-(id)initWithFirstName:(NSString *)fName lastName:(NSString *)lNameandAge:(int)a;
-(void)reportS
@end程序清单3-6
#import "Person.h"
@implementation Person
@synthesize firstName, lastName,
-(id)initWithFirstName:(NSString *)fName lastName:(NSString *)lNameandAge:(int)a{
self = [super init];
if (self) {
self.firstName = fN
self.lastName = lN
self.age =
-(void)reportState{
NSLog(@"This person's name is %@ %@ who is %i years old", firstName,
lastName, age);
@end程序清单3-7
#import &Foundation/Foundation.h&
#import "Person.h"
int main (int argc, const char * argv[]){
@autoreleasepool {
//Instantiate Person objects and add them all to an array:Person *p1 = [[Person alloc] initWithFirstName:@"Rebecca"
lastName:@"Smith"
andAge:33];
Person *p2 = [[Person alloc] initWithFirstName:@"Albert"
lastName:@"Case"
andAge:24];
Person *p3 = [[Person alloc] initWithFirstName:@"Anton"
lastName:@"Belfey"
andAge:45];
Person *p4 = [[Person alloc] initWithFirstName:@"Tom"
lastName:@"Gun"
andAge:17];
Person *p5 = [[Person alloc] initWithFirstName:@"Cindy"
lastName:@"Lou"
andAge:6];
Person *p6 = [[Person alloc] initWithFirstName:@"Yanno"
lastName:@"Dirst"
andAge:76];
NSArray *listOfObjects = [NSArray arrayWithObjects:p1, p2, p3, p4,
p5, p6, nil];
NSLog(@"PRINT OUT ARRAY UNSORTED");
[listOfObjects makeObjectsPerformSelector:@selector(reportState)];
//Create three sort descriptors and add to an array:NSSortDescriptor *sd1 = [NSSortDescriptor
sortDescriptorWithKey:@"age"ascending:YES];
NSSortDescriptor *sd2 = [NSSortDescriptorsortDescriptorWithKey:@"lastName"ascending:YES];
NSSortDescriptor *sd3 = [NSSortDescriptorsortDescriptorWithKey:@"firstName"ascending:YES];
NSArray *sdArray1 = [NSArray arrayWithObjects:sd1, sd2, sd3, nil];
NSLog(@"PRINT OUT SORTED ARRAY (AGE,LASTNAME,FIRSTNAME)");NSArray *sortedArray1 = [listOfObjects
sortedArrayUsingDescriptors:sdArray1];
[sortedArray1 makeObjectsPerformSelector:@selector(reportState)];NSArray *sdArray2 = [NSArray arrayWithObjects:sd2, sd1, sd3, nil];NSArray *sortedArray2 = [listOfObjects
sortedArrayUsingDescriptors:sdArray2];
NSLog(@"PRINT OUT SORTED ARRAY (LASTNAME,FIRSTNAME,AGE)");[sortedArray2 makeObjectsPerformSelector:@selector(reportState)];
章 使用对象集合
return 0;}
要想使用上述代码,需要为 类创建文件。这是一个 类,可以使用文件模板创建。类必须导入到 文件的代码中对于
命令行应用。构建并运行项目,然后通过控制台日志查看数组的排序结果:
PRINT OUT ARRAY UNSORTED
This person's name is Rebecca Smith who is 33 years oldThis person's name is Albert Case who is 24 years oldThis person's name is Anton Belfey who is 45 years oldThis person's name is Tom Gun who is 17 years old
This person's name is Cindy Lou who is 6 years old
This person's name is Yanno Dirst who is 76 years oldPRINT OUT SORTED ARRAY (AGE,LASTNAME,FIRSTNAME)
This person's name is Cindy Lou who is 6 years old
This person's name is Tom Gun who is 17 years old
This person's name is Albert Case who is 24 years oldThis person's name is Rebecca Smith who is 33 years oldThis person's name is Anton Belfey who is 45 years oldThis person's name is Yanno Dirst who is 76 years oldPRINT OUT SORTED ARRAY (LASTNAME,FIRSTNAME,AGE)
This person's name is Anton Belfey who is 45 years oldThis person's name is Albert Case who is 24 years oldThis person's name is Yanno Dirst who is 76 years oldThis person's name is Tom Gun who is 17 years old
This person's name is Cindy Lou who is 6 years old
This person's name is Rebecca Smith who is 33 years old
3.6 查询数组
你拥有填满了对象的数组,想要根据某些条件这些条件可以通过
应用表格中的搜索栏等类似控件进行输入找出数组的某个子集。
你首先需要的是 对象,用于定义搜索查询。接下来,可以使用原始数组的 函数并根据定义的
对象规范返回数组的子集。
该攻略会用到 节中使用的 对象。你要定义如下判断,让返回的数组只包含年龄大于 的 对象:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age & 30"];
判断需要对数组中的对象应用逻辑表达式。这里的 必须是待查询数组中对象的某个属性。使用的比较运算符与编程时使用的相同表
完整列出了 比较运算符。
创建好判断后,你只需要使用
对象作为参数传递进去,即可获得数组的子集:
NSArray *arraySubset = [listOfObjects filteredArrayUsingPredicate:predicate];
你会获得另一个数组,该数组只包含与 对象中所定义规范相匹配的那些对象。参见程序清单 ~。
程序清单3-8
#import &Foundation/Foundation.h&
@interface Person : NSObject
@property(strong) NSString *firstN
@property(strong) NSString *lastN
@property(assign)
-(id)initWithFirstName:(NSString *)fName lastName:(NSString *)lNameandAge:(int)a;
-(void)reportS
@end程序清单3-9
#import "Person.h"
@implementation Person
@synthesize firstName, lastName,
-(id)initWithFirstName:(NSString *)fName lastName:(NSString *)lNameandAge:(int)a{
self = [super init];
if (self) {
self.firstName = fN
self.lastName = lN
self.age =
-(void)reportState{
NSLog(@"This person's name is %@ %@ who is %i years old", firstName,
lastName, age);
@end程序清单3-10
#import &Foundation/Foundation.h&
#import "Person.h"
int main (int argc, const char * argv[]){
@autoreleasepool {
//Instantiate Person objects and add them all to an array:Person *p1 = [[Person alloc] initWithFirstName:@"Rebecca"
lastName:@"Smith"
andAge:33];
Person *p2 = [[Person alloc] initWithFirstName:@"Albert"
lastName:@"Case"
andAge:24];
Person *p3 = [[Person alloc] initWithFirstName:@"Anton"
lastName:@"Belfey"
andAge:45];
Person *p4 = [[Person alloc] initWithFirstName:@"Tom"
lastName:@"Gun"
andAge:17];
Person *p5 = [[Person alloc] initWithFirstName:@"Cindy"
lastName:@"Lou"
andAge:6];
Person *p6 = [[Person alloc] initWithFirstName:@"Yanno"
lastName:@"Dirst"
andAge:76];
NSArray *listOfObjects = [NSArray arrayWithObjects:p1, p2, p3, p4,p5, p6, nil];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age & 30"];
NSArray *arraySubset = [listOfObjects
filteredArrayUsingPredicate:predicate];
NSLog(@"PRINT OUT ARRAY SUBSET");
[arraySubset makeObjectsPerformSelector:@selector(reportState)];
return 0;}
要想使用上述代码,请从 构建并运行 应用。通过控制台查看根据对象的查询结果。
如果您想提高自己的技术水平,欢迎加入本站官方1号QQ群:&&,&&2号QQ群:,在群里结识技术精英和交流技术^_^
本站联系邮箱:}

我要回帖

更多关于 杀敌大神 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信