Как добавить два числа в одной строке? - PullRequest
0 голосов
/ 13 ноября 2018

Я хочу добавить первое и второе значение editText. Например: если пользователь вводит 15, добавьте 1 к 5. Я попробовал этот код:

    val input = editText.text
    if (input.length == 2) { 
        val firstValue = input.length == 1 
        val secondValue = input.length == 2 
        val result = firstValue + secondValue
        textView.text = result
    }

но я получаю такой результат: "[Ljava.lang.Boolean; @ 312b186"

Ответы [ 6 ]

0 голосов
/ 13 ноября 2018

firstValue и secondValue назначаются логические, а не Ints.Быстрое решение будет следующим.

val input = editText.text.toString()
if (input.length == 2) { 
    val firstValue = input[0]
    val secondValue = input[1]
    val result = firstValue.toInt() + secondValue.toInt()
    textView.text = "$result"
}`
0 голосов
/ 13 ноября 2018

В вашем примере вы неправильно извлекаете значения из EditText:

val firstValue = input.length == 1

Что это будет делать, это проверить, если input.length имеет длину 1 и установит firstValue врезультирующий логический (либо true, либо false).следовательно, почему вы логическое значение в результате.

Чтобы извлечь текст из EditText, вы должны сделать что-то вроде:

val inputString = input.getText().toString()

, которая будет извлекать текст из EditText в виде строки.

Далее мы извлекаем один символ с использованием подстроки, а затем анализируем его как целое число.

val firstValue = inputString.substring(0,1).toInt()
val secondValue = inputString.subString(1,2).toInt()

Теперь мы можем сложить наши целые числа, чтобы получить результат:

val result = firstValue + secondValue
0 голосов
/ 13 ноября 2018

Извлеките остаток от числа, используя операцию модуля, и добавьте остаток к переменной результата.Вот код ...

    int remainder, result = 0;
    String value= editText.getText().toString();
    int i=Integer.parseInt(value);
    int temp=i;
    while(temp != 0){
        remainder=temp % 10;
        result += remainder;
        temp=temp/10;
    }
0 голосов
/ 13 ноября 2018

Проблема в том, что val firstValue = input.length == 1 возвращает логическое значение.Как видно из оригинального теста if.

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

val firstValue = input.get(0);

Однако я ожидаю, чтовернуть String.Поэтому вам нужно будет преобразовать String в целое число.

val firstValue = input.get(0).toInt(10);

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

Примечание: вместо get() может потребоваться выполнить.subSequence(0, 1) и .subsequence(1, 2) в зависимости от специфики .toInt().В данный момент у меня не работает среда Kotlin для подтверждения.

0 голосов
/ 13 ноября 2018

Прежде всего, это «половина» дубликата этого вопроса .Но это выходит за рамки этого.

Проблема здесь в том, что val скрывает реальные типы, а затем все идет не так.

[Ljava.lang.Boolean;@312b186" означает, что вы вызываете toString() для массива логических объектов.

Другими словами: вместо того, чтобы собирать строковый объект, вы создали логический массив (с двумя значениями), а затем получили в качестве результата тот Array.toString ().

Итак, впервый шаг: не используйте val повсюду, но указывайте разные типы.

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

0 голосов
/ 13 ноября 2018
    val firstValue = input.length == 1 
    val secondValue = input.length == 2 

Оба эти блока на самом деле являются логическими.firstValue - логический результат «длина ввода равна 1», и аналогично для secondValue.Это означает, что firstValue + secondValue на самом деле что-то вроде

val result = true + false

, что, я думаю, не воспринимается как ошибка во время компиляции из-за ключевого слова Java 9 val.Но результат на самом деле является логическим.

...