2016-12-11 3 views
0

私は複数のifを使用して、スピナーの現在選択されている値に応じてプログラムを実行させていますが、もっとクリーンな方法があるとは思えません。助言がありますか?複数のif文を使用していますが、この例では悪い練習をしていますか?

if(spinnerinput.equals(spinnerinput2)) { 
     output.setText(input.getText()); 
    } 

    else if(spinnerinput.equals("Base 2") && spinnerinput2.equals("Base 10")) { 
     String regex = "[0-1]+"; 

     if (input.getText().toString().matches(regex)) { 
      output.setText(binaryToDecimal(input.getText().toString())); 
     } else { 
      Context context = getApplicationContext(); 
      CharSequence text = "Invalid characters for a binary number!"; 
      int duration = Toast.LENGTH_SHORT; 

      Toast toast = Toast.makeText(context, text, duration); 
      toast.show(); 
     } 
    } 

    else if(spinnerinput.equals("Base 10") && spinnerinput2.equals("Base 2")) { 
     String regex = "[0-9]+"; 

     if(input.getText().toString().matches(regex)) { 
      output.setText(decimalToBinary(input.getText().toString())); 
     } else { 
      Context context = getApplicationContext(); 
      CharSequence text = "Invalid characters for a decimal number!"; 
      int duration = Toast.LENGTH_SHORT; 

      Toast toast = Toast.makeText(context, text, duration); 
      toast.show(); 
     } 
    } 
+1

'if' /' else if'部分は問題ではありませんが、2番目の2つのブロックの内容をパラメータ化された再利用可能なメソッドに分解してください。 –

答えて

3

あなたif-elseはあまり問題ではありませんが、あなたは最小限であるためにあなたのコードをリファクタリングすることができます。下の2つの条件ブロックはCharSequenceのテキストでのみ異なります。それをメソッドに変換して、同じコードをもう一度使うのはなぜですか?

private void yourCurrentMethod() { 

    if(spinnerinput.equals(spinnerinput2)) { 
     output.setText(input.getText()); 
    } 

    else if(spinnerinput.equals("Base 2") && spinnerinput2.equals("Base 10")) { 
     String regex = "[0-1]+"; 
     boolean isBinary = true; 
     doSomething(isBinary, "Invalid characters for a binary number!"); 
    } 

    else if(spinnerinput.equals("Base 10") && spinnerinput2.equals("Base 2")) { 
     String regex = "[0-9]+"; 
     boolean isBinary = false; 
     doSomething(isBinary, "Invalid characters for a decimal number!"); 
    } 
} 

private void doSomething(boolean isBinary, CharSequence text){ 
    if(input.getText().toString().matches(regex)) { 
     if(isBinary){ 
      output.setText(binaryToDecimal(input.getText().toString())); 
     } else { 
      output.setText(decimalToBinary(input.getText().toString())); 
     } 
    } else { 
     Context context = getApplicationContext(); 
     int duration = Toast.LENGTH_SHORT; 

     Toast toast = Toast.makeText(context, text, duration); 
     toast.show(); 
    } 
} 
+0

実際には、この行のコードも異なります: 'output.setText(decimalToBinary(input.getText()。toString()));' –

+0

あなたは正しいですが、答えを編集しました。 – rupinderjeet

+1

もちろん、他の場所で必要とされていない限り、あなたは 'yourCurrentMethod'にブール値を必要としません。 'doSomething'の最初の引数として渡すだけで十分です。 –

関連する問題