使用Swing製作進位轉化器

2020-12-24 程序釀造師
進位轉化

1.各進位之間的轉化

在計算機科學中,常用的進位有二進位、八進位、十進位和十六進位。在開發過程中使用比較多的是二進位和十進位的。如果涉及一些字節編碼操作,十六進位也會用得到,甚至可能會用到三十二進位。

1.1 十進位向其它進位轉化

以正常的十進位數為標準,如果將一個十進位數轉化成二進位數。可以使用除法取餘的方式進行,在下圖中我們用二進位和八進位進行舉例:

十進位轉化成二進位、八進位

上圖所描述的是一個正整數轉化成各進位的算法描述。如果被轉化數是負數,需要經過三步轉化:1.先計算出其正整數的二進位碼。2.再計算其反碼。3.再計算補碼。以-5為例子,計算的二進位如下圖所示:

-5的二進位碼

在不同的計算機語言中,負數的二進位碼不一定相同,因為這取決於各種數據所佔有的內存長度(字節數)。例如在Java中,int佔據4個字節(32位),而long類型佔據的是8個字節(64位),它們在計算-5時的二進位數是不同的。

如果我們無法確定數據所佔據的內存大小,也就無法準確的描述出負數的各進位數值,只能以正數的進位表示,然後增加一個負號。這也是Java中,大整型BigInteger處理的方式。

其它進位向十進位轉化

其它進位向十進位轉化,可以通過按權展開求和的方式進行。假設數值A為N進位數,則其十進位值D的值公式如下:

AmaxBit*Nbit-1 +Amaxbit-1*Nbit-2 +…… + A1N0

其中maxbit為A的最高位數值(A1表示個位數值,Amaxbit表示最高位數值),bit為A的總位數。如果二進位11001和十六進位FFEE轉化成十進位,按照上述公式展開如下:

11001的十進位:1*24+1*23+0*22+0*21+1*0=16+8+0+0+1=25FFEE的十進位:15*163+15*162+14*161+140=61440+3840+224+14=65518其它進位向十進位進行轉化也是按照這個展開公式進行。

2.使用Swing圖形化

我們的主要目的是將進位的轉化用圖形化的方式進行處理,通過GUI界面的形式展現出來。需要我們完成的主要工作如下:

由用戶輸入各種進位的數值,輸入的進位可以調節,但需要控制輸入的總長度。輸出通用的四種進位(二、八、十、十六進位),可以自定義一種輸出進位。進位轉化的顯示是實時的。此外,由於手動輸入數值,可能會超過Java基礎數據的限制,無法確定位數。在轉化負數的時候無法通過補碼來完成,我們的核心轉化工作可以由BigInteger來實現。

在設計GUI界面的時候,我們需要設計四個部分的組件群:

輸入進位控制組件:可使用的組件有JSlider(滑杆)和JComboBox(下拉列表)。進位的轉化範圍可以從二進位到三十六進位,在圖形化中我們可以用滑杆JSlider來處理。JSlider的可以設置成最小值為2,最大值為36,默認值為10。移動單位為1。另外可以並通過一個JLabel組件實時跟蹤滑杆數據變化狀態。輸出進位控制組件:同上。輸入組件:輸入組件可以使用JTextField,在輸入內容的時候,需要對文本進行監控,不能輸入超出轉化範圍的字符。例如三十六進位只能輸入1~9和a到z範圍內的字符。文本控制可以通過Document監聽器進行控制。轉化後的輸出組件:轉化後的輸出組件由五個JLabel構成,分別對應二進位、八進位、十進位、十六進位以及自定義進位。2.1 GUI組件搭建

除了必要操作組件和顯示組件外了,還可以添加一些額外的組件用於界面的裝飾和說明。界面搭建如下圖所示(供參考):

搭建界面

功能分析

由我們手動操作的組件有三個,需要進行一些變量的設置操作,主要的變量如下:

int inHex:輸入進位的整型表示數,默認為10。

int outHex:輸出進位的整型表示數,默認為10。

String regex:用於過濾文本框中字符內容的正則表達式。默認為"[0-9]+"。

1.輸入進位滑杆(JSlider in):設置正確的屬性以及顯示位置。該組件還應該添加變動監聽(ChangeListener)。在監聽中應保持inHex和滑杆in的值一致。此外還應該更新正則表達式regex的內容。並處理左側標籤JLabel中的內容(界面圖形中,滑杆左側的JLabel標籤內容)。

2.輸出進位滑杆(JSlider out):同上。不同之處在於,監聽中應保持outHex和滑杆out的值是一致的。當輸出滑杆調節後,還需要更新左側標籤JLabel中的內容。

3.輸入文本框(JTextField input):設置正確的屬性以及顯示位置。該組件應該對其Document對象進行文檔監聽(DocumentListener),處理insertUpdate監聽內容,監聽的內容有兩部分:

當添加後的文本內容不符合regex的驗證時,刪除新增的內容,保持原有文本內容(需要額外注意一點,DocumentListener中在當前線程中使用Document處理文檔時會出現異常,需要使用EDT線程進行處理)。當文本內容符合正則表達式驗證要求時,將文本框內的信息進行進位轉化處理,並將轉化的結果在對應的JLabel標籤中輸出。程序實現源碼程序源碼下載地址:

https://gitee.com/brewerJava/JavaLearn/tree/master/Convert/src/edu

運行及使用效果圖如下:

效果1(輸入、輸出均為10進位)
效果2(輸入10進位、輸出均為15進位)
效果3(輸入5進位、輸出均為16進位)

上述示例中,我們只進行了最簡單的功能實現,目前無法輸入負數並進行轉化。如果需要增加負數轉換等相關功能,可以在此基礎上進行改造。

這個項目的目的是練習Swing組件,以及EDT線程和工作線程的使用。

相關焦點

  • 16進位顏色表示與RGB色彩模型——零基礎自學網頁製作
    第一個括號中的"1"就是16,就好像10進位中,"10"中的"1"是10一樣的道理。但是我們沒有這樣的計數器,我們顯示數字都是0123這樣顯示,不會使用()來代表"個位、十位、百位......"的概念。因此,數學家為了方便顯示,對16進位9以後的數字約定好使用英文字母表示。
  • 進位轉換器下載_進位轉換器手機版下載_進位轉換器安卓版免費下載...
    進位轉換器 系統安全 大小: 7.52MB
  • 十進位,十二進位,六十進位從何而來?阿拉伯人成就了文藝復興?
    結繩計數穴居人走出洞穴,建造自己的住所,古王國時期的埃及人已能使用繩索牽引巨石製造金字塔;幾乎在同時期黃河流域的先民使用大麻纖維制繩,這項發明不僅在清宮劇中大放異彩;也催生了另一種計數方式,古代印加人使用的名為奇普的結繩方法
  • 中國汽車三效催化轉化器行業現狀調研分析及市場前景預測報告(2020...
    《中國汽車三效催化轉化器行業現狀調研分析及市場前景預測報告(2020版)》對汽車三效催化轉化器市場的分析由大入小,從宏觀到微觀,以數據為基礎,深入的分析了汽車三效催化轉化器行業在市場中的定位、汽車三效催化轉化器行業發展現狀、汽車三效催化轉化器市場動態、汽車三效催化轉化器重點企業經營狀況
  • 二進位小總結
    計算機中通過高低電平表示1或者0,這樣就可以表示一個二進位的數值。一個1或者0表示的數值位稱為一個bit,而計算機中存儲和傳輸數據的最小單位是一個字節(byte)也就是8個bit,所以說計算機所有計算本質上都是基於二進位。在計算機中,我們可以使用1個或者多個字節存儲一個數,但無論是多少個字節,其大小肯定是固定的,同時其所能表示的數值的範圍也是固定的。
  • 《命運2》不可能完成的任務VEX轉化器位置分享
    導 讀 《命運2》的遊戲中隱藏著各種各樣的收集品以及道具,玩家可以通過收集解鎖一些獎勵,下面帶來由「不想說話」分享的《命運2》不可能完成的任務VEX轉化器全位置
  • 與如龍聯動 桐生一馬將登場《二進位領域》
    遊戲概述:  《二進位領域》由開發了《如龍》系列的知名製作人名越稔洋打造,故事發生在2080年的東京,人類為了生存而與背叛的機器人展開廝殺。
  • 零基礎學編程之進位轉換基礎
    計算機使用二進位,是因為計算機設計者發現在複雜電路中,將低電平表示0,高電平表示1,只有兩種電位在通過門電路之後更容易計算。其實用其它進位也可以表示,但是比較麻煩。二進位的基數為2,權為2^n(2的n次方),……、128、64、32、16、8、4、2 1。
  • 四級核心詞彙:swing,valid,champion,快來學學吧!
    嗨,大家好,今天為大家介紹三個單詞:swing,valid,champion,話不多說,讓我們開始吧!swing,valid,champion00:07來自梨梨學英語swingswing是個動詞,意思是「搖擺,擺動」,相當於單詞sway。
  • 《武士零》機器人二進位彩蛋怎麼樣 二進位彩蛋介紹
    導 讀 在武士零一下中機器人二進位彩蛋究竟怎麼樣呢?相信不少小夥伴們都是非常好奇的,那麼想了解的話下面就讓我們一起來看一下吧~!
  • 《少女前線》二進位密碼怎麼破解 二進位密碼破解答案
    導 讀 逆向坍塌麵包房行動二進位密碼是什麼?
  • 數理轉換,互為質數與進位轉換
    先說一下進位:十進位裡逢十進一,1/2就是0.5;2進位裡逢二進一,1/2就是0.1;4進位裡逢4進一,1/2就是0.2;6進位裡逢6進一,1/2就是0.3。那在3進位裡呢?注意:十進位小數是常用的小數進位,但小數進位不一定是十進位。如17/32採用32進位,則小數表示為0.17。有限小數的本質是分母因式分解後的幾組因數,必須都是進位數的因數,比如1/2,1/4,1/5,1/8,1/10,1/16,1/20,它們之所以是10進位的有限小數,就是因為它們的分母最終只能分解為2和5這兩組進位因數。20進位的進位因數仍是2和5。
  • 二進位的前身是八卦?一起走進10000000000的世界
    進一】了解一下二進位、十進位吧!二進位和中國八卦算法一樣?印象中,二進位服務於電腦,電腦將二進位變得家喻戶曉。二進位發明者萊布尼茨曾說過:「從虛無創造萬有,用一就夠了」,而1這個靈感,與中國八卦關係緊密,他曾寫信與北京的神父交流二進位與八卦的關聯性,在他1716年發表的《論中國的哲學》一文中,專門指出了二進位與八卦有共同之處。八卦和二進位相通?
  • 遊戲修改大法 16進位要了解_應用_電腦愛好者
    16進位就是以0~F代表0~15的一種表達方式,在修改時看到的一般是兩個一組,可以表達0(00)~255(FF)。相對於二進位的0,1,它可以在較短的代碼內更多的信息,比如255擁16進位寫成FF,二進位就要寫成11111111(不用數了,是8個1)。顯然16進位用來一些表達一些複雜設置、大型數字更方便。
  • PHP 二進位打包工具 phiwrapper 發布 1.0 版本
    phiwrapper 是一個用於打包胖「二進位」的工具phiwrapper可以通過batsh使得同一文件包含不同平臺的二進位,可以在不同平臺運行:例如,使用phiwrapper打包 Windows 的 PHP PE 二進位和,linux的ELF二進位以及php代碼,在Windows下可以雙擊運行file.bat文件開啟服務,linux下可以用sh
  • 湖大教授說八卦符號就是古代的二進位
    2007年,姜廣輝在《光明日報》上發表了《邵雍的「加一倍法」就是嚴格意義的「二進位」》,為八卦解讀提供了一個新視角。說到二進位,廣大程式設計師肯定不陌生。雖然我們生活中普遍使用十進位,計算機領域卻是二進位的天下,包括今天方便千萬商家、顧客的二維碼,其原理也是基於二進位。而八卦與二進位有異曲同工之妙。組成卦符的兩個基本符號是陰爻和陽爻,它們就相當於二進位的0和1。
  • 圓周率π無限不循環是因為進位的問題嗎
    帶著這個疑問已經很多年了,曾經我也認為一定是進位的問題,如果換成2進位或者12進位甚至16進位,圓周率π至少會有一種可能不是無限不循環小數。隨著數學的發展,以上兩種方法都不在使用,現在粗落估計有100多個公式可以直接算出一定精度的圓周率π。比方說萊布尼茲發現的公式:π/4 = 1 - 1/3 + 1/5 - 1/7 +1/9 - …。印度天才數學家拉馬努金一人就發現了14條計算圓周率的公式。這些公式計算速度是不一樣的,收斂越快,效率越高。現在運用計算機已經計算到34.8萬億位,要知道計算930億光年的宇宙只需40位足矣。
  • 大跌眼鏡:python print竟然不能輸出二進位內容
    前幾天收到一個朋友的私信,他使用python開發cgi程序(這個方向實在是比較冷門),在讀取png文件並輸出的時候,遇到了讓人無法理解的兩個bug,小編花了一上午的時間,各種查資料,終於幫他解決了問題。朋友們若是有程序方面的問題也可以私信小編的哦,小編有空的時候一定會幫忙解決的。
  • 二進位究竟是由誰發明的?是萊布尼茨,還是來源於中國的周易
    並推算出了著名的二進位。對以後的數學發展產生了深遠的影響。然而,這種二進位和中國《周易》裡的內容相吻合,以至於讓二進位的發明權有了爭議。到底是誰發明了二進位?是萊布尼茨還是古老的中國人?那些認為二進位是萊布尼茨發明的人,他們的依據是。萊布尼茨會在收到在中國的法國傳教士白晉寄給他的伏羲六十四卦次序圖和方位圖之前根本沒有見過太極圖。
  • 圖解css表示顏色的4種方式:顏色名稱、十六進位值、rgb和hsl函數
    所以,我們需要一種表示方法來表示我們要使用哪一種顏色。今天我們就來講解一下css中4種基本的表示顏色的方式,它們分別是:顏色的英文名稱、十六進位顏色值、rgb顏色函數和hsl顏色函數。1.顏色的英文名稱css已經預定義好了一百多種常見顏色的英文名稱,我們可以直接使用它們。比如,red(紅色)、purple(紫色)、yellow(黃色)等等。而且這些名稱是不區分大小寫的,比如RED、rED、Red等都相當於red。使用顏色名稱非常直觀明了,這是最簡單、最直接的顏色表示方式。