討論區快速選單
知識庫快速選單
討論區最近新進100則主題 下載Alexa Toolbar讓你上網更有趣
[ 回上頁 ] [ 討論區發言規則 ]
switch 和String
更改我的閱讀文章字型大小
作者 : mulder(Mulder)
[ 貼文 36 | 人氣 4413 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/6/20 下午 02:34:49
請問要以String來配合switch,應該要怎麼寫?
如下 xxxx 的部份該如何才能逹到所想要的功能
String ss = "ABC" ;
switch ( xxxx ) {
  case "ABC" : {}
  case "BCD" : {}
  case "CDE" : {}
}
作者 : duncan_macleod(洋將) Java卓越專家貼文超過1000則
[ 貼文 1121 | 人氣 921 | 評價 2490 | 評價/貼文 2.22 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/6/21 上午 12:42:02

>請問要以String來配合switch,應該要怎麼寫?
>如下 xxxx 的部份該如何才能逹到所想要的功能
>String ss = 'ABC' ;
>switch ( xxxx ) {
> case 'ABC' : {}
> case 'BCD' : {}
> case 'CDE' : {}
>}
>

如果 case 不多,可以改成 if ...else if....else 的架構。

因為 switch 只適用於整數,你可以改用查表的方式:把每個 case 字串與一個 unique integer 配對記錄在 Map 裡,然後以 ss 當作 key 搜尋對應的 number,就可以用 switch 來切換。不然就是用 java.util.List 之類的紀錄每一個 case 的字串,然後找出 ss 的 index 來作為 switch 的參數。
作者 : mulder(Mulder)
[ 貼文 36 | 人氣 4413 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/6/23 下午 03:45:42
謝謝回覆.
其實我還不太明瞭回覆的方法,但是其指出的方向,小弟大概能抓到了,
如: 將字串值先存在陣列之類的地方,經由比對將其轉換成 int 資料,然後再進入
switch - case 中.

我也知道可以使用 if .. else if .. ,但我覺得用 switch - case 來寫比較簡潔明暸,
所以一直在尋找解決之道,所以歡迎發表各式解決之道,供大家參考. 謝謝!!
作者 : javamon65(司機)
[ 貼文 77 | 人氣 5 | 評價 40 | 評價/貼文 0.52 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/6/23 下午 04:45:26
如果可以的話 , 可以使用 char .... !
作者 : john cheng(Neoart) 貼文超過200則
[ 貼文 200 | 人氣 4365 | 評價 210 | 評價/貼文 1.05 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/6/23 下午 04:48:17
再極端一點好了.用hash code
不過你也是要先算出AAA,BBB,CCC的hashcode才行...
(有必要這樣嗎?快不到哪去吧?)
作者 : alex0014(藍色LED) 貼文超過200則
[ 貼文 261 | 人氣 264 | 評價 240 | 評價/貼文 0.92 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/6/25 下午 12:49:40

>將字串值先存在陣列之類的地方,經由比對將其轉換成 int 資料,然後再進入
>switch - case 中.

如果想用 switch 的話可以用一些 int 常數
public interface Flag{
  public static final int ABC = 1;
  public static final int DEF = 2;
  public static final int GHI = 3;
}

switch(flag)
case Flag.ABC :

case Flag.DEF:

case Flag.GHI:

不要用 String 陣列這種方法
不然以後 maintain 的人
光是搞懂每個 int 的意思就會累死
作者 : duncan_macleod(洋將) Java卓越專家貼文超過1000則
[ 貼文 1121 | 人氣 921 | 評價 2490 | 評價/貼文 2.22 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/6/25 下午 01:34:35

>
>>將字串值先存在陣列之類的地方,經由比對將其轉換成 int 資料,然後再進入
>>switch - case 中.
>
>如果想用 switch 的話可以用一些 int 常數
>public interface Flag{
> public static final int ABC = 1;
> public static final int DEF = 2;
> public static final int GHI = 3;
>}
>
>switch(flag)
>case Flag.ABC :
>
>case Flag.DEF:
>
>case Flag.GHI:
>
>不要用 String 陣列這種方法
>不然以後 maintain 的人
>光是搞懂每個 int 的意思就會累死

你這種方式其實並沒有解決以字串來決定程序的問題.

提到 maintain 的問題, 可以把命令(字串)和對策(Strategy)配對放在 dictionary 之類的(Map)結構, 爾後以命令來搜尋出對應的 Strategy 執行, 這樣就可以擺脫數字遊戲了.
作者 : duncan_macleod(洋將) Java卓越專家貼文超過1000則
[ 貼文 1121 | 人氣 921 | 評價 2490 | 評價/貼文 2.22 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/6/25 下午 08:49:27

>
>>
>>>將字串值先存在陣列之類的地方,經由比對將其轉換成 int 資料,然後再進入
>>>switch - case 中.
>>
>>如果想用 switch 的話可以用一些 int 常數
>>public interface Flag{
>> public static final int ABC = 1;
>> public static final int DEF = 2;
>> public static final int GHI = 3;
>>}
>>
>>switch(flag)
>>case Flag.ABC :
>>
>>case Flag.DEF:
>>
>>case Flag.GHI:
>>
>>不要用 String 陣列這種方法
>>不然以後 maintain 的人
>>光是搞懂每個 int 的意思就會累死
>
>你這種方式其實並沒有解決以字串來決定程序的問題.
>
>提到 maintain 的問題, 可以把命令(字串)和對策(Strategy)配對放在 dictionary 之類的(Map)結構, 爾後以命令來搜尋出對應的 Strategy 執行, 這樣就可以擺脫數字遊戲了.
>

我想說聲抱歉,如果搭配 Java reflection 的話,使用 static filed 的確是一個一個可行的辦法。
作者 : alex0014(藍色LED) 貼文超過200則
[ 貼文 261 | 人氣 264 | 評價 240 | 評價/貼文 0.92 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/6/25 下午 10:43:28
>你這種方式其實並沒有解決以字串來決定程序的問題.

我是沒有解決這個問題
Java 不像 VB 的 switch 那麼好用
但是既然有語言上限制
何不換一種寫法
只要 int 常數名稱命得好,其意義是很容易理解的
而且不用多一層 mapping

>我想說聲抱歉,如果搭配 Java reflection 的話,使用 static filed 的確是一個一個可行的辦法。

我倒是沒想過這個方法 ^ ^
作者 : duncan_macleod(洋將) Java卓越專家貼文超過1000則
[ 貼文 1121 | 人氣 921 | 評價 2490 | 評價/貼文 2.22 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/6/25 下午 11:05:44

>>你這種方式其實並沒有解決以字串來決定程序的問題.
>
>我是沒有解決這個問題
>Java 不像 VB 的 switch 那麼好用
>但是既然有語言上限制
>何不換一種寫法
>只要 int 常數名稱命得好,其意義是很容易理解的
>而且不用多一層 mapping

也許他要作的事類似於 command line 的運作方式,比如:當 user 輸入 "list" 之後列出某些資訊清單,那麼你必須要在 runtime 時以字串 "list" 去決定所要執行的動作,就避免不了有個對應的關係 command string <-> command。類似的情況也發生在如果你不想為每一個 menu item 準備一個 action listener,希望以單一一個 action listener 來分派 menu 的命令,也會需要依 action command 來決定執行的程序。

以常數來表示狀態是很常見的作法,但是有彈性上的限制,你無法在 runtime 擴充 state 的集合(不容易動態擴充選擇的 case)。
作者 : cplusplus(Cpp) C++優秀好手貼文超過500則人氣指數超過10000點
[ 貼文 846 | 人氣 16660 | 評價 1120 | 評價/貼文 1.32 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/6/26 上午 08:41:25

>請問要以String來配合switch,應該要怎麼寫?
>如下 xxxx 的部份該如何才能逹到所想要的功能
>String ss = 'ABC' ;
>switch ( xxxx ) {
> case 'ABC' : {}
> case 'BCD' : {}
> case 'CDE' : {}
>}
>
switch裡面只可以放入整數型態的東西....像是int long short char boolean 等等
不可以直接放String的....
你也可以這樣寫 應該有你想要的效果
String cmd[]={"ABC","BCD","CDE",...}
.....
int choice;
for(choice=0;choice<cmd.length;++choice)
    if(xxxx.equals(cmd[choice]))
     break;

switch(choice)
{
........
}
作者 : alex0014(藍色LED) 貼文超過200則
[ 貼文 261 | 人氣 264 | 評價 240 | 評價/貼文 0.92 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2003/6/26 下午 12:44:56
>以常數來表示狀態是很常見的作法,但是有彈性上的限制,你無法在 runtime 擴充 state 的集合(不容易動態擴充選擇的 case)。

嗯~~~~受教
 板主 : 風月
 > Java入門一般區 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - Java入門一般區 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
Java入門一般區
1 洋將 2410 
2 Aron 2130 
3 Aries 1510 
4 DEMO999 1310 
5 Ben 990 
6 ramb 620 
7 ozzy 540 
8 tand 460 
9 Huah 410 
10 vindy 400 
Java入門一般區
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2014 程式設計俱樂部 http://www.programmer-club.com.tw/
0.078125