【问题标题】:Tidying Java code in Android Studio在 Android Studio 中整理 Java 代码
【发布时间】:2016-03-11 23:55:51
【问题描述】:
Button crossButton = (Button) findViewById(R.id.crossButton);
crossButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if (!x1.getText().toString().equals("")) {
            if (!x2.getText().toString().equals("")) {
                if (!x3.getText().toString().equals("")) {
                    if (!y1.getText().toString().equals("")) {
                        if (!y2.getText().toString().equals("")) {
                            if (!y3.getText().toString().equals("")) {
                                double x1no = Double.parseDouble(x1.getText().toString());
                                double x2no = Double.parseDouble(x2.getText().toString());
                                double x3no = Double.parseDouble(x3.getText().toString());
                                double y1no = Double.parseDouble(y1.getText().toString());
                                double y2no = Double.parseDouble(y2.getText().toString());
                                double y3no = Double.parseDouble(y3.getText().toString());
                                double z1 = (x2no * y3no) - (x3no * y2no);
                                double z2 = (x3no * y1no) - (x1no * y3no);
                                double z3 = (x1no * y2no) - (x2no * y1no);
                                resultText.setText(getString(R.string.decimal_vector_output, z1, z2, z3));
                            } else { y3.setError("Needs value"); y3.requestFocus(); }
                        } else { y2.setError("Needs value"); y2.requestFocus(); }
                    } else { y1.setError("Needs value"); y1.requestFocus(); }
                } else { x3.setError("Needs value"); x3.requestFocus(); }
            } else { x2.setError("Needs value"); x2.requestFocus(); }
        } else { x1.setError("Needs value"); x1.requestFocus(); }
    }
});

我将如何清理这些 if 语句之类的?

我尝试了几个 OR 条件,但似乎都失败了。

希望得到帮助。

【问题讨论】:

  • 询问代码审查
  • 函数式编程在这里可以很好地工作......

标签: java android android-studio


【解决方案1】:
Button crossButton = (Button) findViewById(R.id.crossButton);
crossButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {  
        double x1no = getDoubleValue(x1);
        double x2no = getDoubleValue(x2);
        double x3no = getDoubleValue(x3);
        double y1no = getDoubleValue(y1);
        double y2no = getDoubleValue(y2);
        double y3no = getDoubleValue(y3);
        double z1 = (x2no * y3no) - (x3no * y2no);
        double z2 = (x3no * y1no) - (x1no * y3no);
        double z3 = (x1no * y2no) - (x2no * y1no);
});

        private Double getDoubleValue(double x){
            if(!x.getText().toString().equals(""){
            //if(x != null){
                return Double.parseDouble(x.getText().toString());
            }
            else{
                x.setError("Needs value"); 
                x.requestFocus();
            }
        }

【讨论】:

    【解决方案2】:

    您可以使用Alt+Enter 并在每个if 条件下选择Invert 'if' condition。结果看起来像 -

    if (x1.getText().toString().equals("")) { x1.setError("Needs value"); x1.requestFocus(); } else {
                        if (x2.getText().toString().equals("")) { x2.setError("Needs value"); x2.requestFocus(); } else {
                            if (x3.getText().toString().equals("")) { x3.setError("Needs value"); x3.requestFocus(); } else {
                                if (y1.getText().toString().equals("")) { y1.setError("Needs value"); y1.requestFocus(); } else {
                                    if (y2.getText().toString().equals("")) { y2.setError("Needs value"); y2.requestFocus(); } else {
                                        if (y3.getText().toString().equals("")) { y3.setError("Needs value"); y3.requestFocus(); } else {
                                            double x1no = Double.parseDouble(x1.getText().toString());
                                            double x2no = Double.parseDouble(x2.getText().toString());
                                            double x3no = Double.parseDouble(x3.getText().toString());
                                            double y1no = Double.parseDouble(y1.getText().toString());
                                            double y2no = Double.parseDouble(y2.getText().toString());
                                            double y3no = Double.parseDouble(y3.getText().toString());
                                            double z1 = (x2no * y3no) - (x3no * y2no);
                                            double z2 = (x3no * y1no) - (x1no * y3no);
                                            double z3 = (x1no * y2no) - (x2no * y1no);
                                            resultText.setText(getString(R.string.decimal_vector_output, z1, z2, z3));
                                        }
                                    }
                                }
                            }
                        }
                    }
    

    【讨论】:

      【解决方案3】:

      要解决嵌套 if 并优化代码,您可以使用提前返回编码样式。

      对于您的问题:

      Button crossButton = (Button) findViewById(R.id.crossButton);
      crossButton.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
      
       if (x1.getText().toString().equals("")) {
          x1.setError("Needs value"); x1.requestFocus();
      
          return;
         }
      
       if (x2.getText().toString().equals("")) {
          x2.setError("Needs value"); x2.requestFocus();
      
      return;
        }
      
        if (x3.getText().toString().equals("")) {
      x3.setError("Needs value"); x3.requestFocus();
      
      return;
        }
      
        if (y1.getText().toString().equals("")) {
      y1.setError("Needs value"); y1.requestFocus();
      
      return;
        }
      
        if (y2.getText().toString().equals("")) {
      y2.setError("Needs value"); y2.requestFocus();
      
      return;
      }
      
         if (y3.getText().toString().equals("")) {
      
      y3.setError("Needs value"); y3.requestFocus();
      
      return;
      }
      
                   double x1no =  Double.parseDouble(x1.getText().toString());
                                  double x2no = Double.parseDouble(x2.getText().toString());
                                  double x3no = Double.parseDouble(x3.getText().toString());
                                  double y1no = Double.parseDouble(y1.getText().toString());
                                  double y2no = Double.parseDouble(y2.getText().toString());
                                  double y3no = Double.parseDouble(y3.getText().toString());
                                  double z1 = (x2no * y3no) - (x3no * y2no);
                                  double z2 = (x3no * y1no) - (x1no * y3no);
                                  double z3 = (x1no * y2no) - (x2no * y1no);
                                  resultText.setText(getString(R.string.decimal_vector_output, z1, z2, z3));
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-17
        • 2017-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-16
        • 1970-01-01
        相关资源
        最近更新 更多