【发布时间】:2013-05-13 00:05:50
【问题描述】:
当我尝试将我的 char 变量从我的 char 数组转换为 ints 时,发生了一些奇怪的混乱。
这是我的代码:
public class Luhn {
private String cardNumber;
private char[] cardArray;
public Luhn(String cardNumber) {
this.cardNumber = cardNumber;
cardArray = new char[cardNumber.length()];
for (int i = 0; i < cardNumber.length(); i++) {
cardArray[i] = cardNumber.charAt(i);
}
public void calculation() {
for(int i = cardArray.length-1; i >= 0; i-=2) {
char y = cardArray[i];
int x = (int) (cardArray[i] * 1);
if(x > 9) {
//int total = 0;
}
}
}
我在 x 中不断收到奇怪的输出。像 58 之类的东西。我正在向后访问数组并将每个第二个数字检索回数组的前面。我基本上希望 x 是每个数组元素中的任何数字。我知道用这小段代码它会连续覆盖 x,但我希望它是 char 数组中指定的数字,而不是一些与我的数组元素不匹配的随机数。问题在于我尝试将char转换为int的计算方法。
请帮忙
谢谢。
例如;
【问题讨论】:
-
请注意,您的“cardArray”是整数值 1、2、3 的数组...如果您需要字符值,则需要
'1','2','3',...。 -
是的,我实际上应该解释一下,这只是对我的代码外观的稍微改变的表示。我得到这些卡片数组元素的方法是,我使用 for 循环从字符串中提取每个数字,使用字符串类中的 .charAt(i) 方法。它仍然无法让 int x 显示数组中的内容。
-
请注意,Java(和大多数其他语言)中的“字符”是某种形式的“Unicode”(对于 Java UTF16),但对于英语可以被认为是 ASCII。在 ASCII/Unicode 中,字符零的数值为十进制 48,十六进制 30。在 ASCII/Unicode 中(但不是在其他一些较旧的代码标准中),数字是连续的,“1”是十进制的 49,“2”是十进制的 50,“9”是十进制的 57。所以你可以通过从字符的数值中减去“0”(十进制48)来得到字符数字的“值”。
-
这是实际的代码,而不是之前不太复杂的代码
标签: arrays math integer char int