我正在尝试制定一种算法,该算法将执行以下操作:
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。
编辑现在代码运行良好,我有另一个问题。我尝试了我的新工作代码(将几十作为字符字符串值的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。那应该是个数字。出什么事了?老实说,我不知道我写的代码是否能达到我的目的。什么密码?
发布于 2014-05-21 15:08:00
我强烈怀疑问题是tens的类型。您还没有在代码中显示这一点,但我怀疑它是int。
所以这句话:
tens = (upper*7+"").charAt(0);从字符串中获取第一个字符,然后将其存储在int中。例如,字符'4‘是Unicode 52 ('0')是48。向int的转换只是将UTF-16代码单元从一个无符号的16位值转换为一个有符号的32位值。
然后显示tens的值--但是如果tens确实是一个int,它将显示为一个数字。
据我所见,问题在charAt中,因为很明显,7*7的第一个字符不是52。
那么,7*7的字符串表示的第一个字符将是'4‘。当它被转换成一个int时,您将看到它是52。
如果您只希望tens作为char,则应该将其声明为char类型。当然,您不应该使用这个值进行算术--但是当您显示它时,您将看到显示了4,因为字符串转换仍然将它视为一个字符而不是一个数字。
https://stackoverflow.com/questions/23787035
复制相似问题