работа с невероятно большими количествами в.NET

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

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

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 ");
        }
    }
}
30
задан iCodez 22 January 2015 в 16:16
поделиться

7 ответов

26
ответ дан Larsenal 27 November 2019 в 23:24
поделиться

Необходимо использовать класс большого количества, который использует некоторые основные математические принципалы для разделения этих операций. Этот реализация библиотеки C# BigInteger на CodePoject, кажется, является самой многообещающей. Статья имеет некоторые хорошие объяснения как операции с крупной работой чисел, также.

Также см.: Большие целые числа в C#

27
ответ дан Community 27 November 2019 в 23:24
поделиться

До Проекта идет Euler, Вы могли бы рявкать неправильное дерево при ударе исключений OutOfMemory. От их веб-сайта:

Каждая проблема была разработана согласно "одноминутному правилу", что означает, что, хотя может потребоваться несколько часов для разработки успешного алгоритма с более трудными проблемами, эффективное внедрение позволит решению быть полученным на скромно приводимом в действие компьютере меньше чем через одну минуту.

11
ответ дан Jake Pearson 27 November 2019 в 23:24
поделиться

Я предполагаю, что это - C#? F# создал способами решить и эти проблемы (тип BigInt и ленивые последовательности).

можно использовать обоих методы F# от C#, если Вам нравится. Тип BigInt довольно применим с других языков, если Вы добавляете ссылку на базовый блок F#.

Ленивые последовательности являются в основном просто синтаксисом дружественные перечислители. Помещение 100 000 000 элементов в списке не является замечательным планом, таким образом, необходимо заново продумать решения обойти это. Если Вы не должны хранить информацию вокруг, выбросьте ее! Если более дешево повторно вычислить его, чем хранилище это, выбросьте его!

3
ответ дан MrKurt 27 November 2019 в 23:24
поделиться

Как пользователь Jakers сказал, если Вы используете Большие Числа, вероятно, Вы делаете его неправильно.

Из проблем ProjectEuler я сделал, ни один не потребовал математики большого числа до сих пор. Больше о нахождении, что надлежащий алгоритм избегает больших чисел.

Хотите подсказки? Отправьте здесь, и нам можно было бы запустить интересный эйлеров поток.

4
ответ дан abelenky 27 November 2019 в 23:24
поделиться

См. ответы в этом поток . Вероятно, необходимо использовать одну из сторонних крупных целочисленных доступных библиотек/классов или ожидать C# 4.0, который будет включать собственный тип данных BigInteger.

1
ответ дан Community 27 November 2019 в 23:24
поделиться

До определения, сколько будет использовать память приложение, можно проверить доступную память прежде, чем выполнить операцию при помощи класс MemoryFailPoint .

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

1
ответ дан Cameron MacFarland 27 November 2019 в 23:24
поделиться
Другие вопросы по тегам:

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