我正在尝试制作一个能够执行以下操作的算法:
64
797
7
===
79
将取7,然后将其乘以7,然后将答案的最后一位数字向下写入,然后将其乘以7并将第一位数字加7次7,依此类推 - 所以如果你这样做了三次(写下来),你得到我在那里写的作为乘法。
我得到了一个不太好的代码,而不是以这种形式显示(例如)上面的内容:
7,9,4
9,7,6
等我得到这样的东西:
7, 9, 52
9, 55, 54
我的代码:
for(int i = 0; i<3; i++){//Run the code three times
temp=upper*7%10+tens;//get the temp but keeping the upper because I am going to need it for the tens part
tens=(upper*7+"").charAt(0);//get the first character of upper*7
System.out.println(upper+", "+temp+", "+tens);
upper=temp;
}
据我所知,问题出现在charAt中,因为7 * 7的第一个字符显然不是52。
修改 现在代码工作正常,我有另一个问题。我尝试了我的新工作代码(将十位作为char的字符串值的int值而不是char),我有另一个问题。万岁!
Last tens: 0 Now's plain number:7, New:9, Tens:4
Last tens: 4 Now's plain number:9, New:7, Tens:6
Last tens: 6 Now's plain number:7, New:15, Tens:4
Last tens: 4 Now's plain number:15, New:9, Tens:1
Last tens: 1 Now's plain number:9, New:4, Tens:6
我的代码现在与旧代码相同,仅修复了数十。但现在,我的数字是15。这应该是一个数字。怎么了?老实说,我不知道我写的代码是否会满足我的目的。代码会是什么?
答案 0 :(得分:0)
我强烈怀疑问题是tens
的类型。您尚未在代码中显示此内容,但我怀疑它是int
。
所以这一行:
tens = (upper*7+"").charAt(0);
从字符串中获取第一个字符,然后将其存储在int
中。例如,角色&#39; 4&#39;是Unicode 52(&#39; 0&#39;)是48.转换为int
只是将UTF-16代码单元从无符号的16位值转换为带符号的32位值。
然后您显示tens
的值 - 但如果tens
确实是int
,则会将显示为数字
据我所知,问题出现在charAt中,因为7 * 7的第一个字符显然不是52。
嗯,7 * 7的字符串表示的第一个字符将是&#39; 4&#39;。当它被转换为int
时,您会将其视为52。
如果您只想tens
作为char
,则应将其声明为char
类型。当然,你不应该使用该值进行算术运算 - 但是当你显示它时,你会看到4显示,因为字符串转换仍将它视为一个字符而不是一个数字。