當前位置:首頁 » 編程軟體 » 老王教編程

老王教編程

發布時間: 2022-07-11 00:36:42

1. 老王python與老男孩python怎麼樣

如果你有其它語言的編程基礎,我建議你直接找一個pdf的教程,比如《python參考手冊》來學習。
當然如果你對編程完全是新手,看看視頻還是可以的,老王python與老男孩python我的建議你選老王python,你在看視頻的過程中也需要自己動手寫一下代碼,這樣才能真正的學會python。

如果解決了您的問題請採納!
如果未解決請繼續追問!

2. 求一部電影名字

是不是這個~
片名:Stay Alive
譯名:生存游戲
導演:威廉·布蘭特·貝爾William Brent Bell
主演:辛西婭·李·布蘭科Cynthia LeBlanc
艾爾頓·李·布蘭科Elton LeBlanc
索菲亞·布希Sophia Bush
瓊·福斯特Jon Foster

簡介:在一個朋友的神秘凄慘死亡後,一群青少年意外得到了一款最新電腦游戲「生存游戲」。這款號稱X世代的恐怖生存游戲據說是根據17世紀一位被稱為「血腥女伯爵」的貴族夫人的真實故事改編,不僅游戲故事極其考究,畫面和游戲進程也異常真實、隨時讓人背脊發涼。

雖然這游戲本來來因不明,雖然對游戲的其他情況一無所知,但身為電腦游戲狂人的他們對此更覺刺激。不能抵擋住誘惑,這隊配合默契的游戲小組一頭鑽進了這個恐怖生存游戲。游戲果然名不虛傳,緊張、刺激、充滿奇思妙想,只是,游戲的詭異的漸漸顯現出來--當游戲中角色死亡之時,相應的玩家也陸續因為相同的死亡方法死去!游戲世界和真實世界的界限開始模糊,只有盡快找到打敗邪惡、恐怖的血腥女伯爵的方法,才能真正生存下去......

3. 一個編程初學者應該這樣來學習

參考一下《VC新手學堂》里的內容,應該有所幫助。聲明:學.NET要比VC簡單,如果是初學,建議不要學VC了,入門相當困難。但是如果真的掌握VC的話,那你就是個絕頂高手了。下面是正文:

VC入門的一條路

首先聲明,我可不是什麼高手,也就是剛脫貧。因為運氣很好,買到了幾本好書,在學習過程中幾乎沒走什麼彎路,沒費什麼勁就入門了,現在一般的小程序能搞定了。看到那些因為不知從何下手而苦苦掙扎的朋友,希望我的文章能給他們一些幫助。

學編程急不得,上來就學VC肯定碰一頭灰,說VC難就難在這點上了。如果硬上,意志堅強的話也許能挺過來,但也是會缺乏後勁,不得不回過頭來補習基礎知識。意志不堅強的話,很有可能就此放棄了,並留下一個VC難得不得了的印象。其實,只要踏踏實實一步一步來,VC也就是很簡單點事。在這里我說一下,如果你還只是一個初中生,那麼你就應當仔細考慮一下了。首先,限於你的知識和思維能力,學學C語言還應該沒問題,但要學VC是要下相當大的功夫的。而且,你現在學到的東西將來一定會過時,所以不如把精力放在演算法的研究上,畢竟這些東西永遠都不會過時。

我覺著如果走對路子,入門VC,一個暑假應該夠用了。

雖說學VC並不是傳說的那麼難,可不下些苦功夫是學不成的。在學VC前,你必須確定,你是因為熱愛編程才學VC的,而不是出於炫耀或其他。否則,恐怕你堅持不到勝利的那一天。

對於首次接觸編程的同學,我建議最好先學一下Quick BASIC(DOS里就有帶,就是那個QBASIC.EXE),不用多學,知道什麼是整型什麼是浮點,以及DO...LOOP FOR...NEXT 等最基本的知識,能算個階乘,求個積分就行了,關鍵要明白計算機是怎麼執行命令的,對編程有個感性認識。如果你對自己有自信,也可以直接學C++,應該也不會多費太多事。不過我覺著因為有很多資料是FOR VB的,並且網頁編程常用VB Script,以後你也很有可能要用到VB,所以了解一些BASIC對以後也是有幫助的。而且如果只是要算個小題用QB比VC、VB之類方便多了。(找個人教一兩天應該就能搞定了吧)

之後我建議找本初高中信息學奧賽的書(有些奇怪吧)。這些書里講解了基本的演算法,寫的卻比較通俗,沒什麼高深的數學知識,容易理解。這些東西在數據結構課程中有系統嚴密的講解,所以也可等以後再學。但我覺著現階段寫一些小程序,實現些常用演算法對自己的思維是很好的鍛煉,對以後的學習大有好處。我想,能排排序,求個八皇後,算個漢諾塔,再知道深、廣度優先搜索就可以了。

如果你已經有一些編程的基礎知識了,自然就可以跳過以上兩步。

等你對編程有一定的認識後,就應該開始進軍C++了.注意,是C++而不是VC,這兩者根本不是一碼事!別買VC入門,你肯定看不懂!C++是一門語言,而VC教程則是講解如何使用MFC類庫,學習VC應建立在充分了解C++的基礎上。

我覺著比起許多花花綠綠的大全、寶典,不如買本大學的C++教程(注意:別買等級考試的教程,那是應試用的),那些教程大都經過反復錘煉,比較系統,很有含金量,有不會太貴。這里我暴力推薦由清華大學出版社出版的一本《C++程序設計教程》,封面是紅色的,封底是黃色的,看起來很樸素,主編是錢能。這本書簡直是好的沒法說,還便宜(39.5元)。這本書不但告訴你語法,還告訴你為什麼要這樣規定語法,看完之後,你會覺著那許許多多的規定是理所當然的,根本不用費心記,不但不枯燥,反而會使有一種美感。書中還有許多實際編程時應注意的問題,很有價值。這本書還配有《實驗指導》,和《習題集》,不過對於有一定編程經驗的人應該是用處不大,所以我沒買。除了這本書,我建議再買本關於傳統C語言的書,要著重以下幾個方面:編譯預處理、typedef的使用,位運算,標准庫函數的使用(最好有一個比較詳細的列表,用的時候好查)。

C++的標准類模板是個不錯的東東,不過對於學習MFC卻沒有幫助,原因是MFC太落後了(^_^),可以先放一放,要不要學等搞定MFC時再作決定。雖然我沒怎麼學過,不過覺著它挺不錯,而且代表了一種發展方向。雖然學著費勁(那東西幾乎沒一點C++的樣子,簡直是在學新語言),但掌握它可使編程輕松不少。

學完了C++,該學VC了吧?別急,先找本WIN32編程的書,這次沒什麼講究,看著差不多的,便宜一些的就行了,如果有對於VC集成環境的介紹就最好了。WIN32編程是指用WINDOWS API編程,MFC是將眾多的API函數進行了封裝的類庫,用起來方便了不少,但如果沒有一些API編程基礎,對相關概念不了解,學起MFC來可能會很費解。相信我,將來你不會覺著學API編程是浪費時間的。API函數有兩千多,要都學會累死。其實你只要知道如何創建窗口、對話框、控制項、消息循環,了解了句柄的含義就差不多了,最好再了解一點GDI編程。這個階段的關鍵是要理解WIN32程序是如何運作的,把握各種窗口間的關系。因為你以後應該很少直接用WIN32 SDK編寫程序,所以關鍵是理解整體結構,記住幾個函數並沒有什麼意義。函數用的時候可以現查。手頭應有一份比較全面的資料。中文的API函數大全好像只有For VB的,不過看起來應該是沒有任何障礙。英文的資料MSDN中就有,相當全面,也比中文的詳細一些。我建議用中文資料快速查找,有問題再看英文。(我忘了我的html版中文API大全是從哪下載的了,不過書店有售,白皮的,很厚一本,很貴就是了。誰想要可以與我聯系[email protected]

對於想學游戲編程的朋友注意:從現在起,你不必去學什麼MFC了,相信我,那東西除了讓你頭疼一點用處都沒有。游戲都使用Win32 SDK編出來的。現在,你要學的是DirectX。我推薦老王翻譯的DirectDraw文檔(www.imagic3d.com),前面有一些老王自己寫的基礎知識,很適合入門, 在此特別感謝老王的辛勤勞動。我還買了一本《DirectX 7 速成教程》,機械工業出版社出版,封面封底都是紅色。除了翻譯慘了點還算不錯,介紹的挺全面,還有一些游戲編程基礎知識。如果你想圖省事,可以考慮用雲風編寫的風魂游戲庫,很方便的(www.codingnow.com 對雲風的辛勤勞動表示感謝).不過我仍然建議至少了解一下DirectX.這里說一下,很多朋友抱怨找不到有關DirectX的書籍,我告訴你,別去編程書籍里找,去多媒體製作書籍那找,還要把眼睛瞪得大大的、圓圓的。Director.. Director.. DirectX!!!知道了吧,書店工作的人眼神都不大好,我也是有一天沒事瞎轉才發現的,嚇了我一大跳。發現這個秘密後我發現其實有不少關於DirectX的書,只是一般人找不到罷了。學會了DirectX,就可以開始奮鬥了,剩下的問題就只有積累經驗了。

對於志向是應用軟體的朋友,打好了基礎,現在進軍VC的障礙都已掃清了。不過還是應做好充分的思想准備,事情不會那麼順利的。剛開始,你就要面對一個瓶頸,大量的緊密關聯的知識,使你必須一下理解一個整體,而很難一點點來。可以說,學VC最難的就是剛開始。情況有些類似於你第一次創建窗口時面對的那長長的程序,只不過更糟糕就是了。很多人就是在此被一大團知識噎著,放棄了學習。事實上,這幾乎是Windows編程的一大特點,在WIN32編程時你就應當有所體會,而DirectX和COM都有類似問題。記住,一定要堅信:突破了這個瓶頸之後便是一片海闊天空,而有著扎實基礎的你是一定能闖過去的。
我的建議是,不要等徹底弄明白一句才看下一句,而是知道好像怎麼回事就向下看,實在看不懂也硬著頭皮往下看,等能比貓畫虎的作出個菜單、對話框時便回過頭再看一遍,幾遍之後應該就可以大概明白MFC程序的運作了。注意:這里有個關鍵,一定要用心體會面向對象編程的精神,努力將眼前的程序與你之前所學的知識聯系起來。通過比較成員函數和對應的API函數間的區別,嘗試去理解MFC是怎樣封裝相關的API的。例如,相當多的類將句柄封裝了起來,在傳遞參數時加以省略,這就是一個很重要的特性。MFC中有許多的宏,看起來很奇怪,但你不必理會其實現方法,只要知道如何使用便可,這點也很重要。還有,千萬不要過於依賴ClassWizard,對於其生成的代碼要自己進行分析,偷懶就不能真正理解MFC。

這里我介紹一種學法,不過學法這種東西因人而異,所以還要根據個人的情況決定。開始時,教程讓怎麼辦就怎麼辦,比貓畫虎的作出個菜單、對話框,然後試著添加控制項。等能不看教程便做到這些時,開始逐字逐句的試著理解MFC程序的組織。若看不懂就跳過看下面的。就這樣一遍一遍來。如果覺著頭大就先歇上兩天,等清醒了再接著來.最好在這期間多找些介紹MFC框架的文章。注意:先不要碰有關文檔/視結構的東西,否則你會更頭大。然後便可試著寫個定時器、名片夾之類的小東西,熟悉一下各種控制項的使用。 突破了開始的瓶頸之後再學下去便會越學越容易,因為你可以一點一點的積累知識,而不用擔心被噎著了。再過不久,你就不得不開始使用API函數完成一些功能,如在系統托盤加圖標,自畫列表框等。這時,你也會體會到學習WIN32編程的好處了,沒學過的人很可能就此卡殼。

關於VC的教程遍地都是,但魚龍混雜,市場烏煙瘴氣,騙錢的書真不少。有些書很厚,內容當然也很全,對老鳥很不錯,但對於初學者似乎有些浪費錢,因為裡面絕大部分的東西MSDN中都有,並且初學者用不著。老外寫的書一般內容不錯,但翻譯水平是個問題。如果翻譯糟糕可夠你受的,加上價格不菲,我也不建議初學者買。還有些什麼傻瓜書、圖解之類,好像是面向初學者,時則為騙錢,你看完後除了那幾個例子什麼也不會作。如果你看到有一本書花了大量的篇幅圖文並茂,生動形象的介紹如何畫圖,輸出文字,別買!騙錢的!(:-< 我就被坑去42塊現大洋)那些花哨的東西對初學者除了轉移注意力沒任何好處。如果你真的對GDI繪圖很感興趣,就去找些專門書籍,比那些書好多了。最好買名字類似於VC應用,VC編程之類比較正式的,圖不要太多的,字不要太大的,最好是有較多的控制項介紹的。當然,文字流暢也是很重要的。書不要買太多,最多兩本,因為這些書內容都差不多,買多了的話東看西看反倒沒好處。在這里,我建議初學者先別急著掏錢,而是去VC王朝( http://vcdynasty.yeah.net/)下載本MFC教程。雖說是網上教程,卻當相當有水準。不但內容比較全面,還一句廢話也沒有(這里感謝作者的辛勤勞動)。只是可惜對GDI沒有一點介紹,還須其他書籍作補充。等搞定這本教程時,應該就已經入了門,可以有針對性的選購書籍,不用擔心上當受騙了。還有,VC知識庫(www.vckbase.com)的網上雜志也很不錯,對剛入門的人很有幫助,建議下載。入了些門後,各個網站多轉轉,看見好文章就往下拉,對提高水平很有好處。

一套MSDN光碟在這時是必不可少的,什麼都找中文資料是不可能的,即使能找到也會很費時間和金錢,只能看硬著頭皮英文。不過以我的經驗看,只要有高中水平的英語,加上金山詞霸一路滑過去,看那種專業文章還是很容易的。還有,初學者一上來可能根本不知道上哪找需要的東西,我在這里把常用的地方列一下:

WIN32 API: 平台SDK->Reference->Win32 Functions in Alpha Order
MFC類庫資料: Visual C++ Documentation->Reference->Microsoft Fo...
C/C++語言及標准庫資料: Visual C++ Documentation->Reference->C/C++...
標准控制項: 標准控制項都被MFC封裝了,可以參考對應的類,如Edit控制項對應CEdit類.
VC中帶的ActiveX控制項: Visual Basic文檔->參考->控制項參考(唯一的中文資料,卻是最糟糕的。不但是For VB,與C++有很大區別,還翻譯得亂七八糟,幾乎沒法用.如有高手知道哪有英文資料還請告知,不勝感激)

目前市面上的MSDN光碟已經有一段歷史了,有些東西可能有些過時。要最新資料的話,可以到微軟的網站(當然是全英文的)。不過對於初學者似乎沒有必要。

搞定VC後,要學什麼都隨你便了,再學C++Builder,VB,Dephi,java什麼的都是一點難度都沒有了,感覺就象是把關鍵字換了換。或者可以去啃啃COM,據說那是塊硬骨頭(不過好像也只是入門難,因為有了之前的經驗,雖然我沒碰過,但花點時間應該是搞得定的。另外DirectX編程經驗在此應該是有些幫助的)。

最後,我建議有時間的話多研究一下各種演算法。數據結構是一定要看的。不一定要記住(話說回來,不經常用的話也記不住),但至少要知道有那麼回事,萬一碰到問題了要知道往那邊靠。其實,常見的鏈表等結構以及排序等演算法在C++標准類模板中已經實現了,不用你去費勁,但有些了解的總是有好處的。至於離散數學、線性代數什麼的,對於復雜些的演算法是必需的,其中離散數學是數據結構的基礎。不過,我倒覺著只要不是太復雜的問題只用經驗也能解決(就象奧賽書中那樣,只是實現而沒有證明),而且那些東西不用就會忘。萬一碰見個難題解決不了,找個高手幫忙也不錯,省時省力^_^。

下面是我想到的一些雜七雜八的問題,沒什麼條理,湊或看吧:

英語水平不用很高,但至少要有高中水準,否則有你受的。

看書一遍看不懂沒關系,事實上,要一遍就能弄懂你就很有天分了。只要多看幾遍,綜合分析,應該是沒有什麼問題的。

現在的世道,不是書到用時方恨少,而是書到用時方能學。不要試圖滿把抓,而要用到什麼學什麼。這樣,學的又快,記的又牢。

一個錯誤認識-學編程靠的是記憶:這是很要命的思想,會讓你累死而無所得。事實上,你幾乎不用特意記任何東西。對於各種函數、語句,只要知道有那麼個東西,用的時候知道上哪找就行了,用多了自然就記住了。學編程關鍵在理解編程思想。

一個小技巧:活用編譯器可以幫你很多忙。在VC中,當你輸入成員符號.或->時,程序會自動列出此類的成員,你只要選一個就行了。這樣便省了很多記憶負擔。例如,你想獲得一個CString類對象的長度,對應方法肯定是Get什麼,但是GetLetterNum還是GetStrLength卻不知道,你可以輸入xxx.Get,這樣,你便可從列表中找到一個GetTextLength(),不是這個還能是什麼,單擊它的話還可能出現說明。還可避免打錯字。如果想調用本類的成員函數,就輸入this->,就可以查看成員列表了。對於全局函數,則是輸入::即可。這樣的話看起來還清楚。還有,如果沒有出現那個列表,八成是你弄錯了什麼東西,例如變數沒定義,或打錯了字,但也可能是VC的BUG,很少就是了。對於初學者,這可是很好用的功能。

初學編程應遵循的一條原則:比貓畫虎、不求甚解。關鍵在於很多東西你就甚解不了,例如MFC中稀奇古怪的宏。而且,甚解了也沒太大的好處,暫時還是不要管它,會用就行了,什麼時候有了閑工夫再來慢慢琢磨。多留心別人的程序是如何實現的,並照著去做。有時,一些小問題也體現著高深的思想。比如,一個變數要定義在什麼地方,如何組織類的結構。如果不太明白,就先找著別人的樣子去作,時間一長就會自然而然的明白,這就像下棋一樣,老頭怎麼下,你也跟著怎麼下,畢竟他出錯的可能比你小。

還有,我覺著初學者不應把過多的精力放在象Cool的工具條,透明的、氣泡狀的窗口之類的工作上。再搞這些之前,你最好問問自己,自己的程序配得上這些漂亮的界面嗎?尤其是,千萬不要在剛開始動手時就先打扮界面,以免界面也弄好了,熱情也沒了。畢竟,看在眼裡的成果給人的刺激比枯燥的演算法強得多。如果你想搞的話,也要等程序主體定型後再搞。 初學時還應多留心關於程序結構組織的文章,這些東西是很重要的。要從一開始便養成良好的風格。否則有一天當你決定編一個大點的程序時,你就會發現干到一半就干不下去了。

編程不是技術活,而是體力活:學的時候滿腦子全是技術,可用的時候就真成了體力活了。真正做起東西來,最重要的是要有毅力堅持到完。意志不堅強就難免半途而廢。 關於初學者是該學VC還是該學VB的問題:我覺著,學VC會難一些沒錯,但掌握學習方法的話也沒想像的那麼難,而且學VC才能深刻領會面向對象編程的精髓。它使你的思想提升了一個高度,對以後的發展是大有好處的。再說,如果這點困難都克服不了,以後也很難有什麼作為。所以,即使你打定主意用VB,也還是花些時間看看VC,至少知道它的大概結構。從長遠看,這是很有好處的。

關於學C++ Builder還是Visual C++的問題:也許VC真的不太好,但總不會太糟。可關於VC的資料不知是關於C++ Builder的多少倍。尤其對於初學者,這時很要命的!何況兩者相差其實並不太多,學會了一種,再學另一種也不會太費事。

呵,沒想到說了這么多。我已經聲明了,其實我也就是剛入門,以上一切都是我自己的感受,難免有錯誤,還請高手指正。另外,這是我第一次寫文章,加上我語文很糟糕,其實就是想到哪寫到哪,各位就湊或一下吧。

4. 老王PYTHON 培訓如何 不知道的就不要答了

各個Python培訓都有自己獨特的優勢所在,而且每個人的需求不同,自然選擇上看法也是不同的。
在選擇Python培訓機構的時候,道聽途說是沒有用的,最好是親自試聽一下課程,根據自己的實際需求來決定,適合自己的才是最好的。

5. 試編程:求一個數的絕對值。列如輸入-5,則輸出5。第1題怎麼寫

作者 | 沉默王二

來源 | CSDN博客

頭圖 | 付費下載自視覺中國

出品 | CSDN(ID:CSDNnews)
想學習,永遠都不晚,尤其是針對 Java 8 裡面的好東西,Optional 就是其中之一,該類提供了一種用於表示可選值而非空引用的類級別解決方案。作為一名 Java 程序員,我真的是煩透了 NullPointerException(NPE),盡管和它熟得就像一位老朋友,知道它也是迫不得已——程序正在使用一個對象卻發現這個對象的值為 null,於是 Java 虛擬機就怒發沖冠地把它拋了出來當做替罪羊。

當然了,我們程序員是富有責任心的,不會坐視不管,於是就有了大量的 null 值檢查。盡管有時候這種檢查完全沒有必要,但我們已經習慣了例行公事。終於,Java 8 看不下去了,就引入了 Optional,以便我們編寫的代碼不再那麼刻薄呆板。
沒有 Optional 會有什麼問題
我們來模擬一個實際的應用場景。小王第一天上班,領導老馬就給他安排了一個任務,要他從資料庫中根據會員 ID 拉取一個會員的姓名,然後將姓名列印到控制台。雖然是新來的,但這個任務難不倒小王,於是他花了 10 分鍾寫下了這段代碼:
1public class WithoutOptionalDemo {
2 class Member {
3 private String name;
4
5 public String getName() {
6 return name;
7 }
8
9 public void setName(String name) {
10 this.name = name;
11 }
12 }
13
14 public static void main(String[] args) {
15 Member mem = getMemberByIdFromDB();
16 if (mem != null) {
17 System.out.println(mem.getName());
18 }
19 }
20
21 public static Member getMemberByIdFromDB() {
22 // 當前 ID 的會員不存在
23 return null;
24 }
25}

由於當前 ID 的會員不存在,所以 getMemberByIdFromDB() 方法返回了 null 來作為沒有獲取到該會員的結果,那就意味著在列印會員姓名的時候要先對 mem 判空,否則就會拋出 NPE 異常,不信?讓小王把 if (mem != null) 去掉試試,控制台立馬列印錯誤堆棧給你顏色看看。
1Exception in thread "main" java.lang.NullPointerException
2 at com.cmower.dzone.optional.WithoutOptionalDemo.main(WithoutOptionalDemo.java:24)

Optional 是如何解決這個問題的
小王把代碼提交後,就興高采烈地去找老馬要新的任務了。本著虛心學習的態度,小王請求老馬看一下自己的代碼,於是老王就告訴他應該嘗試一下 Optional,可以避免沒有必要的 null 值檢查。現在,讓我們來看看小王是如何通過 Optional 來解決上述問題的。
1public class OptionalDemo {
2 public static void main(String[] args) {
3 Optional optional = getMemberByIdFromDB();
4 optional.ifPresent(mem -> {
5 System.out.println("會員姓名是:" + mem.getName());
6 });
7 }
8
9 public static Optional getMemberByIdFromDB() {
10 boolean hasName = true;
11 if (hasName) {
12 return Optional.of(new Member("沉默王二"));
13 }
14 return Optional.empty();
15 }
16}
17class Member {
18 private String name;
19
20 public String getName() {
21 return name;
22 }
23
24 // getter / setter
25}

getMemberByIdFromDB() 方法返回了 Optional 作為結果,這樣就表明 Member 可能存在,也可能不存在,這時候就可以在 Optional 的 ifPresent() 方法中使用 Lambda 表達式來直接列印結果。
Optional 之所以可以解決 NPE 的問題,是因為它明確的告訴我們,不需要對它進行判空。它就好像十字路口的路標,明確地告訴你該往哪走。
創建 Optional 對象
1)可以使用靜態方法 empty() 創建一個空的 Optional 對象
1Optional empty = Optional.empty();
2System.out.println(empty); // 輸出:Optional.empty

2)可以使用靜態方法 of() 創建一個非空的 Optional 對象
1Optional opt = Optional.of("沉默王二");
2System.out.println(opt); // 輸出:Optional[沉默王二]

當然了,傳遞給 of() 方法的參數必須是非空的,也就是說不能為 null,否則仍然會拋出 NullPointerException。
1String name = null;
2Optional optnull = Optional.of(name);

3)可以使用靜態方法 ofNullable() 創建一個即可空又可非空的 Optional 對象
1String name = null;
2Optional optOrNull = Optional.ofNullable(name);
3System.out.println(optOrNull); // 輸出:Optional.empty

ofNullable() 方法內部有一個三元表達式,如果為參數為 null,則返回私有常量 EMPTY;否則使用 new 關鍵字創建了一個新的 Optional 對象——不會再拋出 NPE 異常了。
判斷值是否存在
可以通過方法 isPresent() 判斷一個 Optional 對象是否存在,如果存在,該方法返回 true,否則返回 false——取代了 obj != null 的判斷。
1Optional opt = Optional.of("沉默王二");
2System.out.println(opt.isPresent()); // 輸出:true
3
4Optional optOrNull = Optional.ofNullable(null);
5System.out.println(opt.isPresent()); // 輸出:false

Java 11 後還可以通過方法 isEmpty() 判斷與 isPresent() 相反的結果。
1Optional opt = Optional.of("沉默王二");
2System.out.println(opt.isPresent()); // 輸出:false
3
4Optional optOrNull = Optional.ofNullable(null);
5System.out.println(opt.isPresent()); // 輸出:true

非空表達式
Optional 類有一個非常現代化的方法——ifPresent(),允許我們使用函數式編程的方式執行一些代碼,因此,我把它稱為非空表達式。如果沒有該方法的話,我們通常需要先通過 isPresent() 方法對 Optional 對象進行判空後再執行相應的代碼:
1Optional optOrNull = Optional.ofNullable(null);
2if (optOrNull.isPresent()) {
3 System.out.println(optOrNull.get().length());
4}

有了 ifPresent() 之後,情況就完全不同了,可以直接將 Lambda 表達式傳遞給該方法,代碼更加簡潔,更加直觀。
1Optional opt = Optional.of("沉默王二");
2opt.ifPresent(str -> System.out.println(str.length()));

Java 9 後還可以通過方法 ifPresentOrElse(action, emptyAction) 執行兩種結果,非空時執行 action,空時執行 emptyAction。
1Optional opt = Optional.of("沉默王二");
2opt.ifPresentOrElse(str -> System.out.println(str.length()), () -> System.out.println("為空"));

設置(獲取)默認值
有時候,我們在創建(獲取) Optional 對象的時候,需要一個默認值,orElse() 和 orElseGet() 方法就派上用場了。
orElse() 方法用於返回包裹在 Optional 對象中的值,如果該值不為 null,則返回;否則返回默認值。該方法的參數類型和值得類型一致。
1String nullName = null;
2String name = Optional.ofNullable(nullName).orElse("沉默王二");
3System.out.println(name); // 輸出:沉默王二

orElseGet() 方法與 orElse() 方法類似,但參數類型不同。如果 Optional 對象中的值為 null,則執行參數中的函數。
1String nullName = null;
2String name = Optional.ofNullable(nullName).orElseGet(()->"沉默王二");
3System.out.println(name); // 輸出:沉默王二

從輸出結果以及代碼的形式上來看,這兩個方法極其相似,這不免引起我們的懷疑,Java 類庫的設計者有必要這樣做嗎?
假設現在有這樣一個獲取默認值的方法,很傳統的方式。
1public static String getDefaultValue() {
2 System.out.println("getDefaultValue");
3 return "沉默王二";
4}

然後,通過 orElse() 方法和 orElseGet() 方法分別調用 getDefaultValue() 方法返回默認值。
1public static void main(String[] args) {
2 String name = null;
3 System.out.println("orElse");
4 String name2 = Optional.ofNullable(name).orElse(getDefaultValue());
5
6 System.out.println("orElseGet");
7 String name3 = Optional.ofNullable(name).orElseGet(OrElseOptionalDemo::getDefaultValue);
8}

註:類名 :: 方法名是 Java 8 引入的語法,方法名後面是沒有 () 的,表明該方法並不一定會被調用。
輸出結果如下所示:
1orElse
2getDefaultValue
3
4orElseGet
5getDefaultValue

輸出結果是相似的,沒什麼太大的不同,這是在 Optional 對象的值為 null 的情況下。假如 Optional 對象的值不為 null 呢?
1public static void main(String[] args) {
2 String name = "沉默王三";
3 System.out.println("orElse");
4 String name2 = Optional.ofNullable(name).orElse(getDefaultValue());
5
6 System.out.println("orElseGet");
7 String name3 = Optional.ofNullable(name).orElseGet(OrElseOptionalDemo::getDefaultValue);
8}

輸出結果如下所示:
1orElse
2getDefaultValue
3orElseGet

咦,orElseGet() 沒有去調用 getDefaultValue()。哪個方法的性能更佳,你明白了吧?
獲取值
直觀從語義上來看,get() 方法才是最正宗的獲取 Optional 對象值的方法,但很遺憾,該方法是有缺陷的,因為假如 Optional 對象的值為 null,該方法會拋出 NoSuchElementException 異常。這完全與我們使用 Optional 類的初衷相悖。
1public class GetOptionalDemo {
2 public static void main(String[] args) {
3 String name = null;
4 Optional optOrNull = Optional.ofNullable(name);
5 System.out.println(optOrNull.get());
6 }
7}

這段程序在運行時會拋出異常:
1Exception in thread "main" java.util.NoSuchElementException: No value present
2 at java.base/java.util.Optional.get(Optional.java:141)
3 at com.cmower.dzone.optional.GetOptionalDemo.main(GetOptionalDemo.java:9)

盡管拋出的異常是 NoSuchElementException 而不是 NPE,但在我們看來,顯然是在「五十步笑百步」。建議 orElseGet() 方法獲取 Optional 對象的值。
過濾值
小王通過 Optional 類對之前的代碼進行了升級,完成後又興高采烈地跑去找老馬要任務了。老馬覺得這小夥子不錯,頭腦靈活,又幹活積極,很值得培養,就又交給了小王一個新的任務:用戶注冊時對密碼的長度進行檢查。
小王拿到任務後,樂開了花,因為他剛要學習 Optional 類的 filter() 方法,這就派上了用場。
1public class FilterOptionalDemo {
2 public static void main(String[] args) {
3 String password = "12345";
4 Optional opt = Optional.ofNullable(password);
5 System.out.println(opt.filter(pwd -> pwd.length() > 6).isPresent());
6 }
7}

filter() 方法的參數類型為 Predicate(Java 8 新增的一個函數式介面),也就是說可以將一個 Lambda 表達式傳遞給該方法作為條件,如果表達式的結果為 false,則返回一個 EMPTY 的 Optional 對象,否則返回過濾後的 Optional 對象。
在上例中,由於 password 的長度為 5 ,所以程序輸出的結果為 false。假設密碼的長度要求在 6 到 10 位之間,那麼還可以再追加一個條件。來看小王增加難度後的代碼。
1Predicate len6 = pwd -> pwd.length() > 6;
2Predicate len10 = pwd -> pwd.length() < 10;
3
4password = "1234567";
5opt = Optional.ofNullable(password);
6boolean result = opt.filter(len6.and(len10)).isPresent();
7System.out.println(result);

這次程序輸出的結果為 true,因為密碼變成了 7 位,在 6 到 10 位之間。想像一下,假如小王使用 if-else 來完成這個任務,代碼該有多冗長。
轉換值
小王檢查完了密碼的長度,仍然覺得不夠盡興,覺得要對密碼的強度也進行檢查,比如說密碼不能是「password」,這樣的密碼太弱了。於是他又開始研究起了 map() 方法,該方法可以按照一定的規則將原有 Optional 對象轉換為一個新的 Optional 對象,原有的 Optional 對象不會更改。
先來看小王寫的一個簡單的例子:
1public class OptionalMapDemo {
2 public static void main(String[] args) {
3 String name = "沉默王二";
4 Optional nameOptional = Optional.of(name);
5 Optional intOpt = nameOptional
6 .map(String::length);
7
8 System.out.println( intOpt.orElse(0));
9 }
10}

在上面這個例子中,map() 方法的參數 String::length,意味著要 將原有的字元串類型的 Optional 按照字元串長度重新生成一個新的 Optional 對象,類型為 Integer。
搞清楚了 map() 方法的基本用法後,小王決定把 map() 方法與 filter() 方法結合起來用,前者用於將密碼轉化為小寫,後者用於判斷長度以及是否是「password」。
1public class OptionalMapFilterDemo {
2 public static void main(String[] args) {
3 String password = "password";
4 Optional opt = Optional.ofNullable(password);
5
6 Predicate len6 = pwd -> pwd.length() > 6;
7 Predicate len10 = pwd -> pwd.length() < 10;
8 Predicate eq = pwd -> pwd.equals("password");
9
10 boolean result = opt.map(String::toLowerCase).filter(len6.and(len10 ).and(eq)).isPresent();
11 System.out.println(result);
12 }
13}

好了,我親愛的讀者朋友,以上就是本文的全部內容了——可以說是史上最佳 Optional 指南了,能看到這里的都是最優秀的程序員,二哥必須要伸出大拇指為你點個贊。
https://blog.csdn.net/qing_gee/article/details/104767082

6. 《老王》講了老王哪三件事

1、老王給作者樓下人家送冰,願意給作者家帶送,車費減半。

2、作者煩老王送錢先生去醫院,老王不要錢。拿了錢,還不大放心。

3、老王臨終前還過來給作者家送香油和雞蛋。

《老王》是當代文學家楊絳於1984年創作的一篇回憶性散文。文章以「我」與老王的交往為線索,回憶了老王的幾個生活片段,刻畫了一個窮苦卑微但心地善良、老實厚道的「老王」形象,表達了作者一家對老王那樣不幸者的關心、同情和尊重。

作者也提出了一個引人深思的問題:社會應不應該以人道主義精神來關心不幸者。這篇文章後被選入多種版本的教材。

(6)老王教編程擴展閱讀:

創作背景

老王文章著於1984年。這是一篇回憶性文章,作者記敘了自己從前同老王交往中的幾個生活片段。當時正是「文化大革命」時期,楊絳夫婦在那個荒唐動亂的特殊年代裡受了不少苦,被認為是「反動學術權威」,失去了女婿。

但是任何歪風邪氣對老王都沒有絲毫影響,他照樣尊重作者夫婦。由此,與老王的交往深深地印刻在了作者的腦海之中。作者寫這篇文章的時候,已經度過了動亂年代,她在追憶動亂年代遇到的這些善良的人們時更容易忽略苦難,而是突出苦難年代裡人性的光輝。

熱點內容
抽獎源碼帶後台 發布:2025-02-08 20:33:54 瀏覽:224
歐博中央空調原始密碼是多少 發布:2025-02-08 20:33:47 瀏覽:335
運動使人快樂緩解壓力 發布:2025-02-08 20:27:01 瀏覽:98
linux命令大文件 發布:2025-02-08 20:25:06 瀏覽:897
C蟻群演算法 發布:2025-02-08 20:21:25 瀏覽:513
私人搭建伺服器能幹嘛 發布:2025-02-08 20:21:24 瀏覽:596
網吧怎麼通過伺服器玩網路游戲 發布:2025-02-08 19:59:52 瀏覽:914
文檔編輯加密 發布:2025-02-08 19:56:31 瀏覽:392
phpmysql存儲過程實例 發布:2025-02-08 19:54:40 瀏覽:161
淘寶賣的地下城腳本 發布:2025-02-08 19:41:40 瀏覽:62