这是我第一次使用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