Yahoo Answers is shutting down on May 4th, 2021 (Eastern Time) and beginning April 20th, 2021 (Eastern Time) the Yahoo Answers website will be in read-only mode. There will be no changes to other Yahoo properties or services, or your Yahoo account. You can find more information about the Yahoo Answers shutdown and how to download your data on this help page.

Anonymous
Anonymous asked in 電腦與網際網路程式設計 · 2 decades ago

switch case 的疑問?

1.class Test{

2.public static void main(String args[])

3.{

4.int j = 2;

5.switch (j)

6.{

7.case 2:

8.System.out.println("Value is two");

9.case 2+1:

10.System.out.println("Value is three");

11.break;

12.default:

13.System.out.println("Value is " + j);

14.break; }

15.}}

※ 如這段程式碼來看,他可以通過編譯以及輸出:

Value is two

Value is three

※但是假如第9行改成 case 2/1: 或是 case 2+=1: 並不行的。

我想問的是說~ 為什麼case 2+1: 或是 case 2-1: 是可以的?

(本人實際編譯操作過。) 請大大解答疑惑 謝謝。

4 Answers

Rating
  • Lv 7
    2 decades ago
    Favorite Answer

    要當switch裡的case要俯合3個條件.1. case的型態要俯合switch的型態. (其實不需要. 只要是int就好)2. 一定要是常數3. 不能有重複不能用2/1的原因是因為2/1=2. 2和1都是整數. 所以2/1是整數運算. 因此結果2也是整數. 且2和1兩個都是常數. 所以2/1的結果2也是常數. 但是你在第7行已有個2了. 若在此再加個2. 那在執行時如果j是2, 應執行哪一個? 所以2/1不行. 但改成3/1就可以. 因3/1=3. 沒有重複.2 += 1的另一個寫法是2 = 2 + 1. 問題是2是常數. 2 = 2 + 1的意思是要改變2這個常數的值. 既已是常數了. 當然就不能改其值. 在Java裡只能改變數的值.2+1或2-1可以是因為, 2+1=3, 2-1=1. 這兩個都是整數運算. 所以結果也是整數. 且兩個都是常數運算. 所以結果也是常數. 此兩case沒有重複所以可以懂不懂?不懂請再問-------------------------------------------Pon,我正要刊Wrappers的答案.沒想到你先刪除掉了.哈哈哈... :) 我把答案刊在這裡吧借用Sun Java parseLong()的定義… :)Parses the string argument as a signed decimal long. The characters in the string must all be decimal digits, except that the first character may be an ASCII minus sign '-' (\u002D') to indicate a negative value. The resulting long value is returned, exactly as if the argument and the radix 10 were given as arguments to the parseLong(java.lang.String, int) method.意思是說. parseLong()會把傳入的字串轉成一個long整數(有正副). 字串裡的字元除了第一個字元以外一定都要是數字. 不能有任何非數字的字元出現. 第一個字元一定要是數字或’-‘(負號). 若字串不俯合以上規則. parseLong()會throw NumberFormatException.所以“1”裡的字元都是數字. 所以沒問題“1L” 裡有個字元’L’不是數字. 所以有問題“010” 裡的字元都是數字. 所以沒問題“0x10” 裡有個字元’x’不是數字. 所以有問題“1.0” 裡有個字元’.’不是數字. 所以有問題懂不懂?不懂請再問--------------------------------------:)

  • yup
    Lv 5
    2 decades ago

    JAVA我也不是很熟,只是最近剛好在上SCJP的課程。

    稍微有摸了一點。

    case 2/1: 這個是合法的,錯就錯在你case 2:己經用過了。錯在重覆。

    你用case 3/1:就會過了。

    case 2+=1:錯在+=的左邊是被變數(variable),而不是放數值(value)。

    就算你用case 2++;也沒用++的左邊也是放變數(variable),而不是放數值(value)。

  • Anonymous
    2 decades ago

    關於吉他手提到的2除1得到的結果會是double型態的數值,個人認為依然是int ,因為2除以1 答案是1...。

    2005-07-09 22:54:25 補充:

    龍 ,雖然我刪除了 不過還是感謝你的回答唷,本來我問Wrappers的時候 不太懂,不過自己又在看了一下,又突然懂了 = =" 不好意思

  • Anonymous
    2 decades ago

    1.在第9行改成 case 2/1:不行的原因是因為當2除1得到的結果會是double型態的數值,而在switch裡變數j值是int型態,當然無法比較囉~

    2.而你說case 2+=1:不能通過編譯是因為在java裡沒有 2+=1這種寫法…

    原因:

    在switch裡的case只能放常數,不能放變數,如果你要判斷的是變數的話,那你只能用if去寫了,還有在switch預設是判斷int型態的變數。

    -------------------------------------------------------------------------------------

    更正:

    Pon說的沒錯,我搞錯了,2/1還是會得到int型態才對,呵呵…^^

    -------------------------------------------------------------------------------------

    我個人覺得龍回答的比較詳細,也比較好。

Still have questions? Get your answers by asking now.