Действительно запутался, как извлечь значение из оператора if - PullRequest
0 голосов
/ 08 июня 2011

Так что в основном у меня есть это утверждение:

int md; // md = marriage deduction
    if (married == 'M'){
    md = 750;
    System.out.println("Deduction for Being Married: " + md);
    }
    else if (married == 'S'){
    md = 500;
    System.out.println("Deduction for Being Single: " + md);
    }

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

int total = balance - md - ad

Баланс и реклама работают нормально, потому что мне не нужно было использовать операторы if для них, но md не будет иметь значения. Ошибка говорит о том, что она не определена, которую я получаю, потому что я никогда не инициализировал ее вне оператора if, мне просто интересно, как получить значение md из операторов if. Большое спасибо за помощь.

Ответы [ 6 ]

5 голосов
/ 08 июня 2011

md не определено, потому что когда вы объявляете его, вы не устанавливаете его значение.Если married не равно M или S, то md остается неопределенным.В противном случае md должен сохранить любое значение, которое вы ему присвоите, потому что оно находится за пределами области действия оператора if.

Просто добавьте предложение else, чтобы установить md в ноль:

if (married == 'M')
{
    md = 750;
    System.out.println("Deduction for Being Married: " + md);
}
else if (married == 'S')
{
    md = 500;
    System.out.println("Deduction for Being Single: " + md);
}
else
{
    md = 0;
    // TODO: System.out.println("Oops. You are neither married nor single.");
}

В качестве альтернативы, вы можете просто инициализировать md на ноль.Я рекомендую сделать оба:

int md = 0;
2 голосов
/ 09 июня 2011

Я бы добавил дополнение к этим ответам.

if (married == 'M') {
    md = 750;
    System.out.println("Deduction for Being Married: " + md);
} else if (married == 'S') {
    md = 500;
    System.out.println("Deduction for Being Single: " + md);
} else {
    md = 0;
    // what if we later add functionality to add divorced or widowed?
    // would this really be the desired functionality to set md to 0
    // better to throw an exception saying we don't recognise the value of married
    // eg. 
    throw new IllegalStateException("unrecognised married state: "+married);
}

В качестве альтернативы вы можете использовать перечисления

public enum Married {

    M("married", 750),
    S("single", 500);

    private String name;
    private int points;

    Married(String name, int points) {
        this.name = name;
        this.points = points;
    }

    public String getName() { return name; }
    public int getPoints() { return points; }

}

String input = // get input somehow

Married status = Married.valueOf(input);
// status is either M or S now. It cannot be null as valueOf throws an exception if it 
// cannot match the input to string to any of the possible values of the enum

int total = balance - status.getPoints() - ad;
1 голос
/ 08 июня 2011

Предполагая, что это JAVA, о котором мы говорим, а замужем является строковым объектом. Вы должны сравнить их, используя .equalsTo:

if (married.equalsTo("M")) {...
1 голос
/ 08 июня 2011

У вас есть условие, где married не является ни S, ни M ... поэтому добавьте окончательный else, чтобы установить его на ноль.

if (married == 'M'){
md = 750;
System.out.println("Deduction for Being Married: " + md);
}
else if (married == 'S'){
md = 500;
System.out.println("Deduction for Being Single: " + md);
}
else {
md = 0;
}

Или сделайте это перед полным оператором if ...

Или у вас есть строчные буквы s или m, которые не чувствительны к регистру символов

1 голос
/ 08 июня 2011

если женат не 'M' или 'S', то md будет неопределенным.

1 голос
/ 08 июня 2011

Ваша ценность для замужних почти наверняка не M или S, таким образом, вы не попадаете ни в одну из ветвей своего утверждения, и md никогда не определяется.

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