在java中连接两个int

在java中连接两个int,java,algorithm,Java,Algorithm,有没有一种不必使用java库来连接两个int的简单方法?也许是数学 假设我有9和10,然后我希望它是910,或者224和225,然后我希望它是224225。您(可能)想要字符串串联(您可能还想要整数结果,如果是这样,请参阅其他答案)。如果这是真的,关于连接,假设a和b是整数: "" + a + b 这是因为如果任一操作数是字符串,则+运算符重载。然后,它将另一个操作数转换为字符串(如果需要),并生成一个新的串联字符串。您也可以调用Integer.toString(a)+Integer.toSt

有没有一种不必使用java库来连接两个int的简单方法?也许是数学

假设我有9和10,然后我希望它是910,或者224和225,然后我希望它是224225。

您(可能)想要字符串串联(您可能还想要整数结果,如果是这样,请参阅其他答案)。如果这是真的,关于连接,假设a和b是整数:

"" + a + b

这是因为如果任一操作数是字符串,则+运算符重载。然后,它将另一个操作数转换为字符串(如果需要),并生成一个新的串联字符串。您也可以调用
Integer.toString(a)+Integer.toString(b)
或使用适当的
String.format
,但这些方法比较冗长。

java.lang.中的任何内容都应该是公平的游戏

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

增编:

我不喜欢下面的语法,因为操作符重载没有像上面那样清楚地声明意图。主要是因为如果错误地取出空字符串,结果会不同

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

这将按预期返回一个整数,但仅在
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)
未定义。

这是我的版本,在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;
}
请随意修改此选项,使其适用于负数。

a+“”+b

导致错误“不兼容类型”

左操作数=左操作数+“”+数字

number在方法声明中定义为int

这很有效

导入java.lang*


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

你希望结果也是整数吗?我遗漏了什么吗?这个怎么样:字符串结果=9+“”+10;或int i=整数。值为(9+“”+10);对最终结果为整数!我一直不喜欢这个符号。如果字符串以某种方式被取出,连接
a
b
的意图并不清楚。@Jeremy Static typing是我的朋友:-)我的观点是,如果我在周五晚些时候意外取出字符串,并在周一早上回来修复代码,我会认为他们想要
Integer.toString(a+b)
@Jeremy-我明白你的意思,但这(在我看来)是一个很弱的论点。人们可以对Java程序进行很多小的更改,这些更改模糊了最初的意图;e、 g.在算术表达式中将
+
更改为
*
,将
&&
更改为
|
。真正的答案是在阅读和修改代码时要小心。@Stephen——这是不同的。这里我们使用一个重载运算符,其中
2+“”
和2+3`具有完全不同的含义。当然,有静态分析就足够了。我并不是说永远不要做这种事情,因为
System.out.println(“你好,今年是”+年)
要清楚得多。在这种情况下要小心。我喜欢将其设置为
inta=Integer.parseInt(9+“”+10)
。“精确得多,”阿德尔——我不同意。请阅读我对pst答案的评论。@Jeremy:这里没有。因为如果您不小心删除了
空的\u引号
,那么第二天早上您会想为什么我要将
int
解析为
int
。这应该会给你一个暗示,你从来没有那么愚蠢的去做。所以,肯定少了些什么。哦,是的
empty_quotes
。在OP要求最终结果是整数而不是字符串之前,我做了这些评论。如果你真的想了解细节,我的答案更准确。你的只是糖。无论哪种方式,它都能完成同样的任务。@Adeel:我不认为这能“更精确”。如果有什么区别的话,那就是短一点。
// The left operand to previousOperator.
private int leftOperand;