如何将字符与数字相乘?



这是我第一次使用stackoverflow!我是初学者,我会尽量把我的问题写得越短越好;

用户输入一个数字,例如1234

char NUMBER = In.read();
while (NUMBER != 'n') {
Out.println(NUMBER);    
NUMBER = In.read();
}

程序将把数字显示为&;1&;"2";"3";"4",到目前为止一切顺利。

现在我想把这些数字与我选择的数字相乘。

当你尝试这个的时候,程序说这是不可能的,因为你不能乘以"char"与"int".

我该如何解决这个问题?这些数怎么相乘?

提前感谢!

我尝试使用ASCII,但当尝试乘法时也不起作用。

代码点

虽然可以使char为您工作,但它是遗留数据类型。作为一个16位的值,char在物理上不能表示大多数字符。

所以我建议你在处理单个字符时养成使用码点整数的习惯。

int[] codePoints = "1234".codePoints().toArray() ;

循环每个代码点。测试该代码点是否代表一个数字字符。将每个代码点更改回文本。将该文本解析为整数。使用Math.multiplyExact相乘来提醒我们整数溢出。最后,报告结果。

int multiplicand = 2 ;
for( int codePoint : codePoints ) 
{
if( Character.isDigit( codePoint ) )
{
String digitAsText = Character.toString( codePoint ) ;
int x = Integer.parseInt( digitAsText ) ;
int y = Math.multiplyExact( x , multiplicand ) ;
System.out.println( x + " * " + multiplicand + " = " + y) ;
}
}

查看此代码运行在Ideone.com。

1 * 2 = 2
2 * 2 = 4
3 * 2 = 6
4 * 2 = 8

短代码

我是一个初学者,我会尽量把我的问题写得越短越好;

短代码很少是一个明智的目标。

较长的代码,用简短的语句编写,更容易阅读,更容易调试,更容易编译器优化。

但是如果你坚持,这里有一个单独的语句,它利用了Java的高级特性,包括流、lambdas和方法引用。

"1234"
.codePoints()
.filter( Character :: isDigit )
.mapToObj( Character :: toString )
.map( Integer :: valueOf )
.map( ( Integer integer ) -> Math.multiplyExact( integer , 2 ) )
.forEach( System.out :: println );

这个单语句代码涉及自动装箱。因此,这段代码可能比上面的长代码运行得稍微慢一点。

运行时:

2
4
6
8

最新更新