объединение двух int в Java - PullRequest
5 голосов
/ 10 ноября 2010

Есть ли простой способ без использования библиотеки Java для объединения двух int?Может быть, математика?

скажем, у меня есть 9 и 10, тогда я хочу, чтобы это было 910, или 224 и 225, тогда я хочу, чтобы это было 224225.

Ответы [ 5 ]

18 голосов
/ 10 ноября 2010

Все в java.lang.* должно быть честной игрой ...

int a = Integer.parseInt(Integer.toString(9) + Integer.toString(10));

Приложение:

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

int a = Integer.parseInt(9 + "" + 10);
16 голосов
/ 10 ноября 2010

Это вернет вам целое число, как и ожидалось, но работает только тогда, когда b > 0.

int a = 224;
int b = 225;
int c = (int) Math.pow(10, Math.floor(Math.log10(b))+1)*a + b; // 224225

Просто краткое объяснение: это определяет количество цифр в b, затем вычисляет коэффициент умножения для a так, чтобы он переместился в основание 10 еще на одну цифру, чем b.

В этом примере b имеет 3 цифры, floor(log10(b)) возвращает 2 (сделайте это интуитивно как 10^2=100, 10^3 = 1000, мы где-то посередине в 225). Затем мы вычисляем коэффициент умножения 10^(2+1), это 1000. Когда мы умножаем a на 1000, мы получаем 224000. Добавление 224000 к 225 дает желаемый 224225.

Ошибка на b == 0, потому что log10(0) не определено.

4 голосов
/ 10 ноября 2010

Вы (вероятно) хотите конкатенацию строк (вы также можете получить целочисленный результат, если это так, см. Другие ответы). Если это так, то о конкатенации представьте, что a и b - целые числа:

"" + a + b

Это работает, потому что оператор + перегружен, если любой из операндов является строкой. Затем он преобразует другой операнд в строку (если необходимо) и приводит к новой объединенной строке. Вы также можете вызвать Integer.toString(a) + Integer.toString(b) или использовать соответствующий String.format, но эти методы более сложны.

1 голос
/ 27 апреля 2013

Вот моя версия, которая работает, когда a, b> = 0.

Это немного длиннее, но в 10 раз быстрее, чем лог-подход, и в 5 раз быстрее, чем добавление строк.

int concat(int a, int b)
{
   if ( b == 0 )
      a *= 10;
   else
   {
      int tempB = b;
      while ( tempB > 0 )
      {
         tempB /= 10;
         a *= 10;
      }
   }
   return a + b;
}

Не стесняйтесь изменить это, чтобы работать для отрицательных чисел.

0 голосов
/ 27 марта 2014

a + "" + b

приводит к ошибке "несовместимые типы"

// The left operand to previousOperator.
private int leftOperand;

leftOperand = leftOperand + "" + number;

число определяется как int в объявлении метода

Это работает

import java.lang. *

leftOperand = Integer.parseInt (Integer.toString (leftOperand) + Integer.toString (number));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...