[Java] 如何將字串轉成數字?

在 [Java] 將字元轉成數字 一文中,海芋曾經介紹過如何將字元轉換成數字,然而,今天在此要教的是如何把字串轉為數字。

或許您不知道,String是一個類別,所以當您宣告字串的時侯,同時也建立了一個類別變數。而在Interger類別底下,有一個parseInt的方法,可以讓您輕鬆地字串轉為整數。

public static int parseInt(String s,int radix);
public static int parseInt(String s);

其中radix代表的是基數。

而這要怎麼用呢?其實用法非常簡單,在這裡舉兩個例子來說明。

例子1:

String input = "10";
int afterConvert = Integer.parseInt(input);

 

在例子1中,我們並沒有使用到 radix 的引數,所以 Java 將輸入的字串視為 10 進位,也因此 afterConvert 的答案為10。
Read More

[Java] 將字元轉成數字

在Java中,若要要將數字字元,即0~9轉成整數型態,若用強制型別轉換,因為數字字元的ascii碼是從48開始,所以會產生錯誤。

而我們要解決這個困難,則有兩種方法可以實做,一種是靠JAVA的Character類別所提供的方法,另一種則是靠我們手動寫程式。

先說手動寫程式法吧,我們只要寫下面的程式碼就可以了

 int num = '數字字元'- '0';

其中數字字元表示 0~9。

而第二種方法則是使用Character類別中的getNumericValue方法,用法如下:

public static int getNumericValue(char ch);
public static int getNumericValue(int codePoint)

其中ch為要轉換的字元。
Read More

[Java] 如何判斷輸入的數字有沒有重複

對許多人而言,猜數字是一個非常好玩的遊戲,海芋之前沒事的時侯,用 Java 寫了一個猜數字遊戲,不過首先遇到的問題是,輸入的數字不能重複。而海芋的頭腦很簡單,只能想出最基本的方法,於是海芋就想到先把陣列做排序,再依序兩兩比較是否重複就好了。

這個想法的源頭是,先複製一個陣列到temp陣列,再將temp陣列排序。而因為temp陣列是排序過的,所以只要第一個陣列元素和第二個陣列元素比較,如果是相同就回傳true,如果是不同就回傳false,接著再依序把第二個陣列元素和第三個陣列元素比,就可以很輕易地比出來了,而且只要一個迴圈。

這個方法所要用到的技巧有「陣列的排序」和「陣列的複製」,如果對這兩個還不熟悉的可以去看看相關的文章喔!

以下為海芋的比較部份的程式碼,其中temp陣列為排序過的陣列:

for(int i=0; i

其中 repeat 代表的意義為是否重覆。

如何用 Windows Media Player 燒音樂光碟?

Windows Media Player是Windows裡面的一套音樂播放軟體,但是他不僅僅是播放軟體,而且具備燒音樂的功能喔!以下就讓海芋來為您介紹怎麼用吧!

 

1.打開Windows Media Player,並選擇「複製到CD或相關裝置」。

 

2.將要複製的音樂,以拖曳的方式,拖曳進「左邊窗格」。

 

3.在右邊選擇燒錄機,再按下〔複製〕即可。

 

4.等待一段時間後,就可以燒錄成功了。根據海芋的燒錄經驗,有時侯Windows Media Player燒錄出來的音樂會失敗或是跳針,不過大部份是成功的。

[Java] 陣列的複製方法

在Java中,如果要複製兩個陣列的內容,除了動手寫迴圈,一個一個陣列元素慢慢複製外,還有更懶的方法嗎?答案是有的,在Java的System類別中,裡面有一個arraycopy的method,只要呼叫這個method,就可以輕易地幫您複製整個函式了。

而讓我們看一下這個method怎麼用。

System.arraycopy(src, srcPos, dest, destPos, length)

其中,src是指來源陣列,dest是指目標陣列。

而srcPos則是指來源陣列的開始位置,destPos則是指目標陣列的開始位置,length則是指要複製的陣列長度。

如果您要完整地複製陣列,那麼只要使用這個method,就可以輕鬆地幫你辦到了喔!

PS:dest陣列要先配置空間喔,如以下程式碼:

int dest[] = new int[src.length];

另一種方法則是使用System類別中的arraycopy這個method,不過他要填入五個參數,對於懶人的程式設計師來說,這參數也未免太多了吧,而且又是在System類別中,誰知道他會藏在那呢?為什麼不集中在Arrays這個類別中呢?

而在Java 1.6版之後,Arrays這個類別中,引進了陣列複製的method,他叫做copyOf,先來看他的method怎麼用吧。

Arrays.copyOf(src, length)

其中,src是指來源陣列,length則是指複製的長度。

而這個method非常有趣,他的length是隨便您填,舉例而言,如果您的來源陣列長度是5,而你只要複製前4個元素,您只要在length輸入4即可,但若是您填超過5,那麼他剩下的便會以預設值顯示。

舉例而言:

int array1[] = {1,2,3,4,5};
int array2[];
array2 = Arrays.copyOf(array1, array1.length-1);

此時array2的內容為{1,2,3,4}。

int array1[] = {1,2,3,4,5};
int array2[];
array2 = Arrays.copyOf(array1, 7);

此時array2的內容為{1,2,3,4,5,0,0}。

所以,如果要複製整個陣列的話,可以想見只要打以下程式碼即可。

int array1[] = {1,2,3,4,5};
int array2[];
array2 = Arrays.copyOf(array1, array1.length);

這個可以說是非常方便地複製整個陣列的method。

最後一個要介紹的方法則是Arrays類別中的copyOf method。在Java 1.6版之後,在Arrays類別底下另外還提供copyOfRange這個method,不同於copyOf這個method,copyOfRange可以讓您自由地選擇範圍複製。

而他的函式原型如下:

Arrays.copyOfRange(src, from, to)

其中from和to分別代表陣列的索引值,換言之,「to-from」則是複製的個數。

至於怎麼使用呢?舉個例子來說明。

int array1[] = {1,2,3,4,5};
int array2[];
array2 = Arrays.copyOfRange(array1, 1, 4);

則array2的內容會是{2,3,4}

因為我們曾經提過,「to-from」為複製的個數,所以在這裡的複製個數即為3,複製範圍則從 array1[1] 開始。

總結來說,copyOfRange 比 copyOf 這個method更有彈性,但 copyOf 這個則是length的長度可以自由設定,超過原陣列的長度則是補陣例的預設值,您可以選擇一個適合您要用的method來使用他。

[Java] 陣列的排序

在演算法中,常見的排序方法不外乎有泡沫排序法(Bubble Sort)、插入排序法(Insertion Sort)、 合併排序法(Merge Sort)、謝耳排序法(Shell Sort)、二元樹排序法(Binary Tree Sort)、堆積排序法(Heap Sort)、快速排序法(Quick Sort)及基數排序法(Radio Soft)等等。而海芋在這不是要教大家寫一個排序的演算法,而是要告訴大家,如何排序一個陣列中的元素呢?

在「陣列的比較」一文中曾經提到Arrays這個類別,在它之中還內建一個sort的method,可以讓您的資料由小到大遞增排序。

說了這麼多,怎麼用呢?用一個程式碼來說明吧。

char []passwordArray = {'H','I'};
compareResult = Arrays.sort(passwordConfirmArray);

而在這個method中,他僅僅提供由小到大的排序,至於由大到小的排序,可能您就要自己寫囉!而如果您能發展出一套演算法,比Sun的演算法快,就算只快0.01秒,那麼海芋勸您現在就起身離開電腦,趕快去申請一個專利吧!

[Java] 陣列的比較

在Java這個程式語言中,若要比較兩個陣列的內容是否相等,要怎麼比較呢?其實在Arrays這個類別中,Java就已經幫你實作了,只要再呼叫Arrays這個類別中的euqals這個method就可以囉!

而讓我們先看一下equals這個method吧!

static boolean equals(boolean[] a, boolean[] a2)
static boolean equals(byte[] a, byte[] a2)
static boolean equals(char[] a, char[] a2)
static boolean equals(double[] a, double[] a2)
static boolean equals(float[] a, float[] a2)
static boolean equals(int[] a, int[] a2)
static boolean equals(long[] a, long[] a2)
static boolean equals(Object[] a, Object[] a2)
static boolean equals(short[] a, short[] a2)

Read More

程式設計中迴圈的 break 和 continue 之差異

在許多程式語言中,break和continue在迴圈的控制中,一直佔有非常重要的地位,他們不僅可以控制迴圈的執行,如果使用得當,也可以讓您的程式架構更加讓人容易明暸。而這兩個都是屬於忽略下列的運算式而直接跳出迴圈的,只不過continue還要再跳入迴圈做判斷,break則直接跳出迴圈。

 

舉一個例子來看好了。

for(int i=0;i<=5;i++)
        {
           if(i==2)
             continue;
           else if(i==4)
             break;
           System.out.println(i);
        }

 

此程式一開始會判斷 i 的值,因為一開始我們給定 i 的初始值為 0,所以在 if..else if 的地方,並不會符合條件式,這個情形一直持續到 i=2 為止。因為 i=2,已經符合我們的條件判斷式了,所以我們這時侯程式會執行 continue,並且忽略下面的的程式碼,重新回到迴圈做判斷,這時 i 會變3,再跳入迴圈中繼續執行程式碼。來到了 i=4 的地方,又符合我們的條件判斷式了,所以我們這時侯程式會執行break,同樣地,會忽略下面的的程式碼,但在此時就跳出迴圈了喔,所以整個迴圈就不再執行。

所以,根據以上的理論,您可以很輕易地知道這個迴圈要印出的結果為「0、1、3」。

但是,也有可能是在兩個 for 迴圈中有  break,舉例來說,如以下的程式碼,那麼會跳出那一個呢?

for(int i=0;i<=5;i++)
        {
            for (int j =0; j <= 5; j++)
            {
                if( j == 2)
                    continue;
                else if(j == 4)
                    break;
                System.out.println("i = "+ i + ", j = " + j);
            }
        }

 

我們就先直接執行程式碼,來看一下答案。

i = 0, j = 0
i = 0, j = 1
i = 0, j = 3
i = 1, j = 0
i = 1, j = 1
i = 1, j = 3
i = 2, j = 0
i = 2, j = 1
i = 2, j = 3
i = 3, j = 0
i = 3, j = 1
i = 3, j = 3
i = 4, j = 0
i = 4, j = 1
i = 4, j = 3
i = 5, j = 0
i = 5, j = 1
i = 5, j = 3

沒錯,當 break、continue 只會針對含有 break 、continue 的區塊做繼續或是跳出或是繼續判斷的動作。所以在使用 break、continue 關鍵字在多層迴圈的判斷時,必須特別小心!

遞增運算子(++) 與遞減運算子(–)

在許多程式語言中,遞增運算子(++) 與遞減運算子(–)在迴圈的使用上,一直佔有一席之地,原因無他,只是因為他非常好用,而在這裡先解釋一下他的用法。

當我們寫「x++」時,意味著我們將要進行「x=x+1」的運算;同理,當我們寫「x–」時,則是意味著我們將要進行「x=x-1」的運算。

而在以上的用法,就稱為後置(posfix)版本,或許聰明的您會想到,那前置(prefix)是什麼?

如果我們將「x++」改寫為「++x」時,我們還是會進行「x=x+1」的運算;同理,當我們寫「–x」時,則是意味著我們將要進行「x=x-1」的運算。

或許您會問,那後置和前置的用法,一樣囉?

答案並不盡然,這兩者差在運算的時間點不同,以一個例子來說好了。

<?
x=1;
print(x++);  // 1
print(x);    // 2
print(++x);  // 3
print(x);    // 3
?>

 

一開始,x的預設值為1,而在印出「x++」時,大多數的程式語言會先將x印出來,再進行「x=x+1」的動作,所以接下來的print(x),會秀出的結果是2。

 

在進行印出「++x」的動作時,大多數的程式語言會先將「x=x+1」進行運算,再進行印出x的動作。所以在此行,印出的結果就是3了。

 

如果以上的例子還不夠明白,那我們舉個比較生活化的例子好了。

 

如果我們有去超商買過東西,您可以先請店員先把商品包裝起來再結帳,也可以請店員先結帳再包裝商品,如果把「x=x+1」的動作比喻為店員結帳,而把商品包裝當作值的話,那麼「x++」就是屬於前者,「++x」就是屬於後者囉!

 

簡單來說,就是都有進行結帳的動作,但只是時間點的不同而已。