2010-11-10 4 views
5

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

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

+1

Вы хотите, чтобы результат также был целым числом? –

+3

Я что-то не хватает? как об этом: Строковый результат = 9 + "" + 10; или int i = Integer.valueOf (9 + "" + 10); –

+0

да! конечный результат как целое! – aherlambang

ответ

18

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

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

Добавление:

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

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

Мне нравится делать это 'int a = Integer.parseInt (9 +" "+ 10)'. Гораздо точнее. –

+1

@ Adeel - Я не согласен. Прочтите мои комментарии на ответ pst. – Jeremy

+0

@Jeremy: Это не держится здесь. Потому что, если вы случайно удалите 'empty_quotes', то на следующее утро вы поймете, почему я должен анализировать' int' на 'int'. И это должно дать вам намек на то, что вы никогда не были настолько глупы, чтобы делать это на первом месте. Таким образом, должно быть что-то отсутствует. О, да, 'empty_quotes'. –

4

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

"" + a + b 

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

+2

Я всегда не любил эту нотацию. Если строка была как-то выведена, намерение конкатенировать 'a' и' b' не ясно. – Jeremy

+1

'a +" "+ b' является более читаемым для начинающих. – BalusC

+0

@Jeremy Статическая типизация - мой друг :-) – 2010-11-10 02:39:43

16

Это даст вам целое назад, как ожидалось, но работает только когда 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) не определено.

+0

Интересно. +1 –

+0

Это было так аккуратно! +1 –

1

Вот моя версия, которая работает, когда а, Ь> = 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

а + "" + Ь

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

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

leftOperand = leftOperand + "" + номер;

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

Это работает

импорта java.lang. *

leftOperand = Integer.parseInt (Integer.toString (leftOperand) + Integer.toString (номер));