Который лучше, применяют два условия во вложенном Если или использование единственного с И? [закрытый]

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

Например, ниже - класс ученика, который будет использовать его в нашем коде.

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
16
задан shwartz 18 November 2014 в 12:28
поделиться

9 ответов

Вы собираетесь выполнить в чем-то другом 'вложенный если' пример если, на самом деле, txtPackage. Текст не пуст, но содержит что-то другое, чем "abc"?

, Если бы Вы не, я спросил бы, почему Вы проверяете на string.empty вообще?

Вы могли просто записать:

if (txtPackage.Text == "abc")
{

//

}

и быть сделанным с ним.

Полностью зависит от того, что Вы хотите сделать в конце.

6
ответ дан 30 November 2019 в 21:54
поделиться

Я не собирался вмешиваться, но видел, что некоторые ответы здесь, кажется, о, "Мне нравится мой код к взгляд как это"... Я чувствую, что должен сказать, что что-то :)

"Лучше" означает, что код выполнится быстрее, или это более читаемо / растяжимый. Вы были бы хотеть вложить свой if's в случае, что у Вас возможно было бы несколько проверок, что у всех есть общее требование.

Пример:

if (myThingy != null)
{
    if (myThingy.Text = "Hello") ...

    if (myThingy.SomethingElse = 123) ...
}

РЕДАКТИРОВАНИЕ: также нужно сказать, что вложение Ваш IF's требует большего количества циклов ЦП (и поэтому "медленнее"), чем сингл, ЕСЛИ. Вдобавок ко всему, порядок Ваших условий может значительно увеличить производительность.

Exapmle снова:

if (somethingQuick() && somethingThatTakesASecondToCalculate()) ...

НАМНОГО быстрее (конечно), чем

if (somethingThatTakesASecondToCalculate() && somethingQuick()) ...

, поскольку, если первая часть, ЕСЛИ сбои, вторая часть не будет даже выполняться, таким образом экономя время.

7
ответ дан 30 November 2019 в 21:54
поделиться

Действительно необходимо определить то, под чем Вы подразумеваете "лучше".

Мой стиль должен использовать тот, если и И если, как в Вашем примере, я тестирую то же самое на два различных значения.

, Если два теста концептуально отличаются, я, вероятно, вложу их

if (!user_option.work_offline) {
    if (no_current_connection) {
        start_connection()
    }
}
3
ответ дан 30 November 2019 в 21:54
поделиться

Я чувствую, что лучше избежать вложенной IFS.

Иногда, я даже копирую простые тесты для предотвращения уровня вложенности.

Пример (Python):

# I prefer:
if a and b:
    foo()
elif a and not b:
    bar()
elif not a and b:
    foobar()
elif not a and not b:
    baz()

# Instead of:
if a:
    if b:
        foo()
    else:
        bar()
else:
    if b:
        foobar()
    else:
        baz()

Иногда более естественно иметь выражение else как последнюю часть. В тех случаях я обычно утверждаю условия выражения else. Пример:

if a and b:
    foo()
elif a and not b:
    bar()
elif not a and b:
    foobar()
elif not a and not b:
    baz()
else:
    assert not a and not b
    baz()
1
ответ дан 30 November 2019 в 21:54
поделиться

Это зависит от того, чего точно Вы хотите достигнуть. Это - логический вопрос, а не запрос программирования. Если у Вас есть зависимое условие т.е. Если первым является TRUE, и затем протестируйте второе условие; если вторые TRUE затем делают что-то, если ЛОЖЬ делает что-то, в этом случае необходимо использовать вложенный если. Но Вам нужно состояние обоих условия сделать что-то затем, что можно пойти с операторами.

1
ответ дан 30 November 2019 в 21:54
поделиться

+1 к itsmatt

По исходному вопросу, я лично избегаю, вложил IFS по мере возможности, иначе я закончу с большим количеством кода стрелки.

существуют, однако, исключения к этому мини-правилу. Если там будет другим поведением для каждого из условных результатов, то вложенный ifs может быть ответом. Необходимо тщательно рассмотреть влияние вложения, таким образом, Вы не пишете трудный читать (и поэтому поддержать) код.

0
ответ дан 30 November 2019 в 21:54
поделиться

Я предпочитаю использовать условное выражение И/ИЛИ операторы при необходимости вместо вложенной IFS. Выглядит менее грязным и делает для меньшего количества строк кода.

if (thisIsTrue) {
if (thisIsTrueToo) doStuff();
}

essentally то же как:

if (thisIsTrue && thisIsTrueToo) doStuff();

, если thisIsTrue является ложью, второе условие не оценено. Работы также для || для условного выражения ИЛИ.

0
ответ дан 30 November 2019 в 21:54
поделиться

Я думаю, что это зависит от того, как Вы хотите, чтобы это текло, если Вы только выполняете на истинном, истинном (или особенность) затем ту, если оператор - все, в чем Вы нуждаетесь.

0
ответ дан 30 November 2019 в 21:54
поделиться

По-моему, необходимо использовать стиль, который имеет большую часть смысла для того, на что Вы тестируете. Если эти два тесно связаны, Вы могли бы протестировать на обоих на той же строке без потери ясности. Особенно легкий, когда программа разрешает "если x == (1 ИЛИ 2)" конструкции.

, С другой стороны, если бы два теста разделяются, я предпочел бы разделять их для создания логики более явной.

0
ответ дан 30 November 2019 в 21:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: