Java - charAt错误的角色

时间:2014-05-21 15:03:31

标签: java string charat

我正在尝试制作一个能够执行以下操作的算法:

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。这应该是一个数字。怎么了?老实说,我不知道我写的代码是否会满足我的目的。代码会是什么?

1 个答案:

答案 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显示,因为字符串转换仍将它视为一个字符而不是一个数字。