Если-еще с двумя возможными способами - PullRequest
0 голосов
/ 12 марта 2019

Не могли бы вы помочь мне найти решение для моего кода? Я делаю новое приложение для Android, в котором мне нужно сделать некоторые вычисления, и сценарий следующий:

Есть четыре поля для расчета. Два поля EditText (число десятичное) являются обязательными, а два других являются необязательными, НО, если дополнительные поля заполнены, то это необходимо сделать при расчете, в противном случае будут использоваться только обязательные поля.

Прямо сейчас у меня все в порядке с вычислением обязательных полей, но когда я пытаюсь использовать условие if-else для включения дополнительных полей в вычисление, приложение выходит из строя. Я не уверен, где я должен сделать эту двухшаговую опцию, если я должен использовать логическое значение для проверки состояния поля опции, если я просто продолжу использовать if-else ... Проблема не в самом калькуляторе, а в том, что у кода есть два пути: один, использующий только обязательные поля, если ничего не вставлено, и другой, использующий все четыре поля.

Спасибо всем!

Код ниже использует только два обязательных поля.

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 голосов
/ 12 марта 2019
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 + "%");
    }
0 голосов
/ 12 марта 2019

Предположим, что дополнительные поля называются edit1 и edit2.Я также предполагаю, что для использования альтернативных вычислений должны присутствовать оба необязательных значения.

Чтобы повысить ясность кода, я бы определил две логические переменные, чтобы явно указать, имеют ли обязательные и необязательные поля значения.Что-то вроде следующего.

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
        }
    }
}

Обратите внимание, что если какое-либо обязательное значение отсутствует, вычисления не выполняются.

Надеюсь, это поможет - Карлос

0 голосов
/ 12 марта 2019

Ты почти понял. Что происходит сейчас, поскольку у вас есть конструкция if-if-else, она считает, что первый оператор if отделен от блока if-else ниже. То есть, если editEtanol.length() == 0 оценивается как false, он выполнит приведенный ниже блок else, даже если editGasolina.length() == 0 оценивается как true.

Изменение строки if (editEtanol.length() == 0) { на else if (editEtanol.length() == 0) { уже должно помочь. Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...