2009-10-18 4 views
6

私ははいかどうかの質問&答えがあります。私は答えがイエスだった場合、別のイエスかノーの質問をしたいと思います。私のインストラクターは、答えの入力としてcharAt(0)を使用することを望んでいます。Java質問:別のスイッチ内でswitch文を使用することは可能ですか?

スイッチステートメントを別のステートメント(ネストされたifステートメントのようなもの)に含めることはできますか?

ありがとうございます。

編集:ここではい

display "Would you like to add a link (y = yes or n = no)? " 
input addLink 

switch (link) 
    case 'y': 
     display "Would you like to pay 3 months in advance " + "(y = yes or n = no)?" 
     input advancePay 

       switch(advPay) 
         case 'y': 
       linkCost = 0.10 * (3 * 14.95) 

       case 'n' 
       linkCost = 14.95    
    case 'n' 
     linkCost = 0.00 
+16

は、この不自然な例を見てみましょう、switchステートメント内で実行するswitch文を説明するために、 ... –

+0

私は、人の* nがアイデアをテストするためのコードを書く必要がないということが重要だと思います。 –

+2

@ande_turner:いいえ。だから、人の代わりに物事をするのではなく、質問に答えるためにここにいる。 –

答えて

14

=私の擬似コードのサンプルですが、しないでください。このようなレベルのロジックがさらに必要な場合は、2番目のスイッチをわかりやすい名前で独自のメソッドに配置します。

EDIT:追加した例では、2つのブール条件があります。スイッチを使用することをお勧めします。if & else条件を代わりに使用してください。テストケースには(STRING.charAt(0) == 'y')を使用してください。boolean isY(final String STRING) { return (STRING.charAt(0) == 'y' || STRING.charAt(0) == 'Y'); }

+5

+1の簡潔さは「はいだが、しない」。 – CPerkins

1

これは可能ですが、それは非常に複雑で読みにくいでしょう。ほとんどの場合、最初のswitch文の中でメソッドを呼び出し、そのメソッドで必要な処理(必要に応じて別のスイッチを含む)を行うなど、より良い方法があります。

0

ほとんどのプログラミング言語は直交しています。つまり、機能を使用することは、意味がある場合は通常、場所に依存しません。

たとえば、ローカル変数をpublicとして宣言することはできません。

+1

@スレイニ:これがどのように質問に答えるかわかりません。具体的には、Javaの 'switch 'が直交しているかどうかについては何も言わない。直交性は、プログラミング言語のデザイナーが努力するが、まれに完全に達成するという性質です。特定の言語構成が言語仕様を理解することなく直交すると推測することはできません。それは例外の1つかもしれません。 –

2

はい。スイッチは言語ブロックのステートメントパターンを壊しますが、これは主に、Javaによって使用されるswitchステートメントが基づいているC/C++のためです。すべての3つの言語で

、switch文は次の形式を取ります。

switch(variable) { 
    case n: 
     statement 1; 
     statement n; 
     (optional) break; 
    case n+1: 
     statement 1; 
     statement n; 
     (optional) break; 
    // Optionally more statements 
    (optional) default: 
     statement 1; 
     statement n; 
} 

switch文は、伝統的な言語パターンを壊しているので、多くのプログラマは、伝統的なブロックのスタイルを用いた場合には、その複数のステートメントをラップ:{ }

これは、3つの言語すべてでほとんどの構文でブロックスタイルのステートメントを1つのステートメントと見なすことができるためです。switchステートメントでは、単一のケースで複数のステートメントを実行するブロックスタイルは必要ありません。

各ケースを区切るbreak文を使用しない場合は、 "fall through"が発生します。ケースnが一致して途切れていない場合、そのケース(n + 1ケース)のコードが実行されます。 1にブレークがなく、一致した場合、デフォルトコードが実行され、いずれもブレークがなかった場合、ケースn、ケースn + 1のコード、およびデフォルトが実行されます。

デフォルトはオプションで、switch文を実行するためのデフォルトアクションを指定します。通常、デフォルトの条件はジェネリックハンドラか、値が論理的にswitch文の値以外でない場合に例外をスローするのに適しています。ちょうど言って...それは、あなたがそれを自分でテストしている可能性がこの質問を書くためにあなたを要した時間で

String message = null; 
int outerVariable = getOuterVariable(); 
switch(outerVariable) { 
    case n: 
     statement 1; 
     statement n; 
     break; 
    case n+1: 
     int innerVariable = getInnerVariable(); 
     switch(innerVariable) { 
      case 1: 
       message = "IT WAS 1"; 
       break; 
      default: 
       message = "WHY WOULD YOU DO THIS? OH THE HUMANITY!"; 
     } 
     break; 
    // Optionally more statements 
    (optional) default: 
     statement 1; 
     statement n; 
} 
+0

上記のコードに注意してください。javaに変換する場合、case文は定数式でなければなりません。 – Chii

+0

Chii - 良い点。また、Java 5のenumはswitch文でも使用できます。 – MetroidFan2002

関連する問題