Android Студия «Переменная никогда не используется», но фактически используется (проблема BigInteger, нерешенная ссылка) - PullRequest
1 голос
/ 05 апреля 2020

Итак, добрый день всем.

Я начинаю писать свое самое первое собственное приложение для kotlin через Android Studio, и у меня есть одна проблема, которую я не могу решить. При записи этого кода: (bi используется перед каждой переменной, которая является BigInteger btw.)

if (length == 2) {
     val bicombinations: BigInteger = valueOf(bivariations.toLong())
           .multiply(bivariations)
    }

, это говорит мне, что «бикомбинации» никогда не используются. Тем не менее, я фактически использую его в этой строке здесь:

val biresult: BigInteger = bicombinations.divide(bipcpower)

В этой строке я получаю еще одно сообщение об ошибке / предупреждение для бикомбинаций, "неразрешенная ссылка: бикомбинации"

РЕДАКТИРОВАТЬ: Второе предупреждение теперь звучало так: «Переменные« бикомбинации »должны быть инициализированы». Я знаю, как это исправить при использовании Int или Double или чего-то еще, но поскольку BigIntegers являются значениями val, я просто не могу установить значение для бикомбинаций вне оператор if

РЕДАКТИРОВАТЬ 2: Вот как решается проблема инициализации: Сначала объявите бикомбинации вне ветви if, например:

var bicombinations: BigInteger = ONE

и внутри if ветвь, просто используйте бикомбинации без "val" перед ним и не объявляйте его как BigInteger снова. Спасибо @ Elliot-frisch

Может кто-нибудь сказать мне, что делать? Это действительно помогло бы мне закончить мое приложение!

Ответы [ 3 ]

1 голос
/ 05 апреля 2020

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

Либо переместите код результата в ветвь if

if (length == 2) {
    val bicombinations: BigInteger = valueOf(bivariations.toLong())
        .multiply(bivariations)
    val biresult: BigInteger = bicombinations.divide(bipcpower)
}

, либо добавьте ветвь else, если это гарантирует, что переменная bicombination установлена ​​

val bicombinations: BigInteger
if (length == 2) {
    bicombinations = valueOf(bivariations.toLong())
        .multiply(bivariations)
} else {
    bicombination = BigInteger(0)
}
val biresult: BigInteger = bicombinations.divide(bipcpower)
1 голос
/ 05 апреля 2020
val biresult=0.toBigInteger()

Таким образом, вы можете инициализировать biresult. Когда вы определяете переменную в операторе if, вы не можете использовать ее из-за этого и получаете неразрешенную ссылку. Вы должны определить это в своей функции, чтобы не получить эту ошибку.

1 голос
/ 05 апреля 2020

Измените ваш код, как показано ниже (необходимо определить вашу переменную вне блока)

val bicombinations: BigInteger

if (length == 2) {
 bicombinations = valueOf(bivariations.toLong())
       .multiply(bivariations)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...