2016-11-14 2 views
-4

電気回路を複製するプログラム内で使用されるかなり標準的なスイッチケースです。私が探している主なものは、効率を無視することなく、コードの読みやすさと簡潔さです。このJavaスイッチのケースをより効率的に/読みやすくする方法の提案は誰でもありますか?

編集:私はオフセットの目的が不明であることを認識していませんでした。オフセットの仕方は、整数であるoffsetに等しい数の文字で入力文字をオフセットすることです。ソースが「A」であり、オフセットあれば、例えば2であり、これは、インデックス2

char passCurrent(char source) 
{ 
    source += offset; 

    switch(source) 
    { 
    case 'a': 
     return this.paths[0]; 
    case 'b': 
     return this.paths[1]; 
    case 'c': 
     return this.paths[2]; 
    case 'd': 
     return this.paths[3]; 
    case 'e': 
     return this.paths[4]; 
    case 'f': 
     return this.paths[5]; 
    case 'g': 
     return this.paths[6]; 
    case 'h': 
     return this.paths[7]; 
    case 'i': 
     return this.paths[8]; 
    case 'j': 
     return this.paths[9]; 
    case 'k': 
     return this.paths[10]; 
    case 'l': 
     return this.paths[11]; 
    case 'm': 
     return this.paths[12]; 
    case 'n': 
     return this.paths[13]; 
    case 'o': 
     return this.paths[14]; 
    case 'p': 
     return this.paths[15]; 
    case 'q': 
     return this.paths[16]; 
    case 'r': 
     return this.paths[17]; 
    case 's': 
     return this.paths[18]; 
    case 't': 
     return this.paths[19]; 
    case 'u': 
     return this.paths[20]; 
    case 'v': 
     return this.paths[21]; 
    case 'w': 
     return this.paths[22]; 
    case 'x': 
     return this.paths[23]; 
    case 'y': 
     return this.paths[24]; 
    case 'z': 
     return this.paths[25]; 
    } 
    return '/'; 
} 
+0

を書くだけで、別の方法です。 com。 –

+0

ソースとオフセットの宣言を投稿します。これらが文字列の場合は、どのようにcharを使用できますか? –

+1

@SotiriosDelimanolisはそのままで、文脈の欠如を考えると、[codereview.se]で受信されにくいでしょう。 'パス'はどこにも定義されておらず、 'ソース'がどこから来ているのか(その目的)、この 'オフセット'が何であるのか、なぜアルファベットの文字を扱っているのか、それがこのコードが解決している*実際の*問題を解決する良い方法です。つまり、問題の形状*(たとえば、「読みやすさと効率を向上させる」など)は、実際にはスタックオーバーフローに関するトピック外のCR質問のように見えます。 –

答えて

4

でパス・アレイ内の値を返す範囲を確認した後switchと使用減算を排除します。何かのように、

if (source >= 'a' && source <= 'z') { 
    return this.paths[source - 'a']; 
} 
return '/'; 

そしては、我々は

return (source >= 'a' && source <= 'z') ? 
     this.paths[source - 'a'] : '/'; 
2

charのような三元とそのさらに短縮できるだけの数です。その数の意味は、文字がUnicodeでどのようにレイアウトされているか(0から127までの数字は長い時間前にUnicodeに組み込まれたASCIIで定義されています)と関係しています。

したがって、source'a'ある場合、それは実際には整数値97を有するaからzの文字がすべてのUnicodeで連続しているので、bが98である、cが99である、等

かのことを意味しますaの場合は0、bの場合は1などとすると、簡単な減算で取得できます。したがって:

if (source >= 'a' && source <= 'z') { 
    return this.paths[source - 97]; 
} 

または、同等に(そしてもっと読み出し可能):

if (source >= 'a' && source <= 'z') { 
    return this.paths[source - 'a']; 
} 

'a'以来、あなたはおそらくcodereview.stackexchangeでより良い結果を得ることができます97

+0

これはなぜこれを行う方法なのかの良い説明ですが、私は他の答えを選んだのは、クリーナー –

+0

問題ありません。私は自分自身を使っていたかもしれませんが、それはスタイルの問題です。私は三元演算子が嫌いなプログラマーを知っています。 – ajb

関連する問題