В Java, как бы я добавить строку в строковую переменную? - PullRequest
2 голосов
/ 31 января 2012

У меня есть код, который генерирует случайное число в форме 0-1 3 раза, и мне нужно, чтобы он был добавлен в переменную, чтобы он превратился в двоичное число. Итак, теоретически, это будет работать три раза и, возможно, даст мне 101;

String storage = null;
        int i = 0;
        while (i < 3) {
            int binny = this.giveMeBinary();
            storage.concat(String.valueOf(binny));
            i++;
        }

        int ans = Integer.parseInt(storage);

Но когда я пытаюсь запустить это, я получаю ошибку NullPointerException для хранилища.Есть ли способ просто «добавить» строку в переменную?

метод giveMeBinary просто возвращает 0 или 1.

Ответы [ 10 ]

10 голосов
/ 31 января 2012

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

        String storage = "";
        int i = 0;
        while (i < 3) {
            int binny = this.giveMeBinary();
            storage += (String.valueOf(binny));
            i++;
        }

        int ans = Integer.parseInt(storage);

Однако объединять строки таким способом не рекомендуется. Что вы можете сделать, это использовать StringBuilder примерно так:

        StringBuilder storage = new StringBuilder();
        int i = 0;
        while (i < 3) {
            int binny = this.giveMeBinary();
            storage.append(String.valueOf(binny));
            i++;
        }

        int ans = Integer.parseInt(storage.toString());
1 голос
/ 31 января 2012

Если вы хотите двоичное число, то есть случайное число от 0 до 7 или от 000 до 111 в двоичном виде.

int ans = giveMeBinary() * 4 + giveMeBinary() * 2 + giveMeBinary();

однако, если вы хотите десятичное число, которое выглядит как двоичное число.

int ans = giveMeBinary() * 100 + giveMeBinary() * 10 + giveMeBinary();
1 голос
/ 31 января 2012

Если вы хотите использовать конкатенацию строк, просто инициализируйте хранилище как "" (пустая строка), затем используйте

storage += String.valueOf(binny);

но если вы зацикливаетесь и строите строки, вам действительно следует использовать StringBuilder, поскольку строки неизменны

StringBuilder buffer = new StringBuilder();

тогда

buffer.append(binny);
1 голос
/ 31 января 2012

У вас есть две проблемы:

  • Вы никогда не назначаете ненулевое значение для storage, но вызываете для него метод concat. Это всегда будет бросать NullPointerException

  • Вы предполагаете, что String.concat изменит существующее строковое значение. Это не так. Строки являются неизменяемыми в Java.

Я бы предложил вместо этого использовать StringBuilder и вызвать append в цикле:

int i = 0;
StringBuilder builder = new StringBuilder();
while (i < 3) {
    int binny = this.giveMeBinary();
    builder.append(binny);
    i++;
}
int ans = Integer.parseInt(builder.toString());

То, почему вы тогда анализируете двоичное число , такое как "011", как если бы это было десятичное число , - это другой вопрос. Что вы на самом деле хотите, чтобы результат был? Вы действительно хотите числа 0, 1, 10, 11, 100, 101, 110 или 111?

1 голос
/ 31 января 2012

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

String storage = "";
0 голосов
/ 31 января 2012

Причина, по которой вы получаете исключение NullPointerException, заключается в том, что переменная «хранилище» никогда не инициализируется.Таким образом, первый вызов «storage.concat» попытается выполнить операцию с NullPointer.

Для выполнения конкатенации строк вам нужно использовать изменяемый класс, такой как StringBuilder, класс String является неизменяемым (вы не можете изменить его экземпляр).

Вот пример использования StringBuilder:

StringBuilder storage = new StringBuilder();
int i = 0;
while (i < 3) {
   int binny = this.giveMeBinary();
   storage.append(binny);
   i++;
}

int ans = Integer.parseInt(storage.toString());
0 голосов
/ 31 января 2012

хранилище переменных не инициализировано. Следующий код будет выдавать NPE

storage.concat(....)
0 голосов
/ 31 января 2012

Выдает исключение NullPointerException, поскольку хранилище равно нулю.Попробуйте следующее

StringBuilder storage = new StringBuilder();
        int i = 0;
        while (i < 3) {
            int binny = this.giveMeBinary();
            storage.append(String.valueOf(binny));
            i++;
        }

        int ans = Integer.parseInt(storage.toString());
0 голосов
/ 31 января 2012

попробуйте это:

String storage = "";
0 голосов
/ 31 января 2012

После того, как вы исправите NullPointerException, попробуйте это:

storage = storage + String.valueOf(binny)

... и затем прочитайте о StringBuilder.

...