If-else有两种可能的方式

时间:2019-03-11 22:17:05

标签: java android if-statement

能帮我为我的代码找到解决方案吗?我正在制作一个新的Android应用,需要在其中进行一些计算,并且情况如下:

有四个要计算的字段。必须保留两个EditText(十进制数字)字段,而另两个是可选字段,但是,如果填充了可选字段,则需要在计算中使用它,否则将仅使用必需字段。

现在,我完全可以计算必填字段,但是当我尝试一些if-else子句以在计算中包括可选字段时,应用程序就变成了香蕉。 我不确定应该在哪里做这个两步选择,如果我应该使用布尔值来检查选项字段条件,或者我只是继续使用if-else ... 问题不在于calculatin本身,而是有两种代码遵循方式:一种是在未插入其他内容的情况下仅使用必填字段,另一种是使用所有四个字段。

谢谢大家!

下面的代码仅使用两个必填字段。

public void calcularResultado(View view) {

    //check for blank values in obligatory fields
    if (editGasolina.length() == 0) {
        editGasolina.setError("Insira o valor");
    }
    if (editEtanol.length() == 0) {
        editEtanol.setError("Insira o valor");

    //runs the code
    } else {

        double valorGasolina = Double.parseDouble(editGasolina.getText().toString());
        double valorEtanol = Double.parseDouble(editEtanol.getText().toString());

        double valorResultado = valorEtanol / valorGasolina;
        double porcentagem = (valorResultado) * 100;
        String valorResultadoTexto = Double.toString(porcentagem);
        valorResultadoTexto = String.format("%.2f", porcentagem);

        if (valorResultado >= 0.7) {
            textResultado.setText("GASOLINA");
            textRendimento.setText(valorResultadoTexto + "%");
        } else {
            textResultado.setText("ETANOL");
            textRendimento.setText(valorResultadoTexto + "%");
        }

3 个答案:

答案 0 :(得分:0)

您几乎明白了。现在发生的情况是,由于您具有if-if-else构造,因此它认为第一个if语句与下面的if-else块是分开的。也就是说,如果editEtanol.length() == 0的计算结果为false,即使else的计算结果为editGasolina.length() == 0,也会执行下面的true块。

将行if (editEtanol.length() == 0) {更改为else if (editEtanol.length() == 0) {应该已经很有帮助。希望有帮助!

答案 1 :(得分:0)

public void calcularResultado(View view) {

//check for blank values in obligatory fields
if (editGasolina.length() == 0) {
    editGasolina.setError("Insira o valor");
}
if (editEtanol.length() == 0) {
    editEtanol.setError("Insira o valor");

//runs the code
} else {

    double valorGasolina = Double.parseDouble(editGasolina.getText().toString());
    double valorEtanol = Double.parseDouble(editEtanol.getText().toString());

    boolean optionalField1Used = optionalEditText1.length() != 0;
    boolean optionalField2Used = optionalEditText2.length() != 0;

    double valorResultado = 0;

    if (!optionalField1Used && !optionalField2Used) {
         valorResultado = valorEtanol / valorGasolina;
    } else if (optionalField1Used && !optionalField2Used) {
         valorResultado = //some other calculation
    } else if (!optionalField1Used && optionalField2Used) {
         valorResultado = //yet another calculation
    } else {
          valorResultado = //calculation if both optional fields used
    }

    double porcentagem = (valorResultado) * 100;
    String valorResultadoTexto = Double.toString(porcentagem);
    valorResultadoTexto = String.format("%.2f", porcentagem);

    if (valorResultado >= 0.7) {
        textResultado.setText("GASOLINA");
        textRendimento.setText(valorResultadoTexto + "%");
    } else {
        textResultado.setText("ETANOL");
        textRendimento.setText(valorResultadoTexto + "%");
    }

答案 2 :(得分:0)

让我们假设可选字段称为edit1edit2。我还假设为了使用替代计算,必须同时存在两个可选值。

为了提高代码的清晰度,我将定义两个布尔变量,以明确指示强制字段和可选字段是否具有值。类似于以下内容。

public void calcularResultado(View view) {
    var mandatoryValues = true;
    var optionalValues = false;
    if (editGasolina.length() == 0 { 
        editGasolina.setError("Insira o valor");
        mandatoryValues = false;
    } 
    if (editEtanol.length() == 0 { 
        editEtanol.setError("Insira o valor"); 
        mandatoryValues = false;
    }
    if (edit1.length() > 0 && edit2.length() > 0) {
        optionalValues = true;
    }
    if (mandatoryValues) {
        if (optionalValues) {
            // do alternative computation 
        } else {
            // do computation for mandatory values only
        }
    }
}

请注意,如果没有一个强制性值,则不会执行任何计算。

希望有帮助-卡洛斯(Carlos)