Что означает термин “BODMAS”?

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

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

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
задан paxdiablo 25 August 2010 в 07:59
поделиться

7 ответов

http://www.easymaths.com/What_on_earth_is_Bodmas.htm :

, Что Вы думаете ответ на 2 +, 3 x 5?

он (2 + 3) x 5 = 5 x 5 = 25?

или 2 + (3 x 5) = 2 + 15 = 17?

BODMAS может прийти на помощь и дать нам правила следовать так, чтобы мы всегда получили правильный ответ:

(B) ракетки (O) rder (D) ivision (M) ultiplication (A) ddition (S) вычитание

Согласно BODMAS, умножение должно всегда делаться перед дополнением, поэтому 17 на самом деле корректный ответ согласно BODMAS и также будет ответ, который даст Ваш калькулятор, если Вы введете в 2 + 3 x 5.

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

result = (((i + 4) - (a + b)) * MAGIC_NUMBER) - ANOTHER_MAGIC_NUMBER;

с BODMAS можно сделать это немного более ясным:

result = (i + 4 - (a + b)) * MAGIC_NUMBER - ANOTHER_MAGIC_NUMBER;

я думаю, что все еще использовал бы первый вариант - больше скобок, но тот способ, которым я не должен изучать еще одно правило и я сталкиваюсь с меньшим количеством риска упущения его и порождения странных трудно для отладки ошибок?

Просто предположение той части все же.

РЕДАКТИРОВАНИЕ Mike Stone: Фиксированная математика как Gaius указывает

20
ответ дан 30 November 2019 в 16:10
поделиться

Другая версия этого (в средней школе) была, "Извините Мою Дорогую Тетю Sally".

  • Круглые скобки
  • Экспоненты
  • Умножение
  • Подразделение
  • Дополнение
  • Вычитание

мнемоническое устройство было полезно в школе и все еще полезно в программировании сегодня.

8
ответ дан 30 November 2019 в 16:10
поделиться

Порядок операций в выражении, таких как:

foo * (bar + baz^2 / foo) 
  • B ракетки сначала
  • Orders (т.е. Полномочия и Квадратные корни, и т.д.)
  • Division и Multiplication (слева направо)
  • А ddition и Subtraction (слева направо)

источник: http://www.mathsisfun.com/operation-order-bodmas.html

5
ответ дан 30 November 2019 в 16:10
поделиться

Я не имею права редактировать ответ @Michael Stum , но это не совсем корректно. Он уменьшает

(i + 4) - (a + b)

к

(i + 4 - a + b)

, Они не эквивалентны. Лучшее сокращение, которое я могу получить для целого выражения,

((i + 4) - (a + b)) * MAGIC_NUMBER - ANOTHER_MAGIC_NUMBER;

или

(i + 4 - a - b) * MAGIC_NUMBER - ANOTHER_MAGIC_NUMBER;
5
ответ дан 30 November 2019 в 16:10
поделиться

Когда я изучил это в начальной школе (в Канаде), это упоминалось как BEDMAS:

B ракетки
E xponents
D ivision
M ultiplication
А ddition
Subtraction

Только для тех из этой части мира...

4
ответ дан 30 November 2019 в 16:10
поделиться

Я не действительно уверен, насколько применимый к программированию старой мнемосхемы BODMAS так или иначе. Нет никакой гарантии на порядке операций между языками, и в то время как многие сохраняют стандартные операции в том порядке, не все делают. И затем существуют некоторые языки, где порядок операций не действительно все что значимый (диалекты Lisp, например). В некотором смысле, Вы, вероятно, более обеспечены для программирования, если Вы забываете стандартный порядок и или используете круглые скобки для всего (например, (a*b) + c) или конкретно изучаете порядок на каждый язык, Вы работаете в.

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

Я считал где-нибудь, что особенно в C/C++, разделяющем Ваши выражения на маленькие операторы, было лучше для оптимизации; таким образом вместо того, чтобы писать чрезвычайно сложные выражения в одной строке, Вы кэшируете части в переменные и делаете каждого на шагах, затем создаете их, как Вы продвигаетесь.

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

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

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