伊莉討論區

標題: switch 可用字串嗎? [打印本頁]

作者: beyle    時間: 2013-8-12 03:02 PM     標題: switch 可用字串嗎?

例如:
import java.util.Scanner;

public class Switch {

public static void main(String[] args) {

                Scanner input = new Scanner(System.in);

               


                System.out.println("Please enter a command :");


String text = input.nextLine();

switch (text)
{
case "start" : System.out.println("Machine start.");
        break;
case "stop" : System.out.println("Machine stop.");
        break;
default : System.out.println("machine stand by..");
}
}
}
我用字串(text) 來放入switch 中⋯⋯

作者: snowflying    時間: 2013-8-12 03:48 PM

Convertible int values , strings , enum variables 都可以
Convertible int values 包含 char , byte , short , long

strings 支援似乎是在 SE7 ,所以要看版本
舊版的可能不行
作者: ddttdtxb    時間: 2013-8-14 07:13 AM

如同其它大大在其它文章的回應, Java 到 1.7 (或叫 Java 7)之後才支援 String 的 switch 作法。自己之前也為這種事情困擾許久,發現字串只能使用 equals() 來判斷,為此曾經寫過許多 if...else 語句。或是將內容改成數字,在後面加上註解,因為總覺得傳入的資料不如文字那麼讓人容易了解。

不過後來發現其它人的作法,是將要放入 switch 判斷的資料,用數字常數的方式處理。以樓主的例子,會建立像是以下的常數…
  1. public static final int START = 1;
  2. public static final int STOP = 0;
複製代碼
這樣 swtich 也就可以改寫成…
  1. switch (param) // param 是 int
  2. {
  3.    case START :
  4.       System.out.println("Machine start.");
  5.       break;
  6.    case STOP :
  7.       System.out.println("Machine stop.");
  8.       break;
  9.    default :
  10.       System.out.println("machine stand by..");
  11. }
複製代碼
如果真的只能使用字串,也建議將它們放到常數中。
這樣其它程式在呼叫的時候,也能夠使用常數,讓編譯在編譯時為你檢查,避免不免要的問題,像是拼錯字或是大小寫打錯。
作者: BlueMarken    時間: 2013-8-16 09:10 AM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: henry4343    時間: 2013-8-28 09:38 AM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: i1313677    時間: 2013-8-28 11:44 AM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: louisz6ster    時間: 2013-8-30 08:15 PM

另外補充一下也可以使用enum方式搭配switch也是個方式之一,只是變複雜了點。
作者: kevin19900125    時間: 2013-9-1 10:45 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: bluewingx    時間: 2013-9-11 04:54 PM

我之前原本是在1.7版寫的,本來還很意外為什麼switch可以用String,
後來有一次重安裝後,裝到1.6版,再跑的時候就不能執行,
找了很久才發現1.7版才有支援switch(String),結果變的我要重新修改好多地方的switch,
當然更新到1.7就可以了,不過如果不麻煩的話,還是盡量用數值去判斷。
作者: craiglam    時間: 2013-9-15 02:33 PM

我只知道是支援char的data type, string好像不能吧
作者: lang201    時間: 2013-9-18 01:06 AM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: zzxc12345    時間: 2013-9-19 02:59 AM

原來1.7已經支援String, 記得1.6時還是用If或enum做的
作者: carlosc    時間: 2013-9-25 11:37 AM

提示: 作者被禁止或刪除 內容自動屏蔽




歡迎光臨 伊莉討論區 (http://aaa.eyny.com/) Powered by Discuz!