【问题标题】:Converting a char to an int for int arithmetic in java在java中将char转换为int以进行int算术
【发布时间】: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


【解决方案1】:

你可以使用Character.getNumericValue(char),见JavaDoc here

【讨论】:

    【解决方案2】:

    你可以的

    (int)(cardArray[i] - '0')
    

    将单个数字转换为数字。

    您可以这样做的原因是因为每个字符都是一个数字。

    '0' = 48
    '1' = 49
    '2' = 50
    '3' = 51
       ...
    '9' = 57
    

    减去0 的值得到每个字符的整数值。

    【讨论】:

      【解决方案3】:

      chars 实际上是代表字符的数字。如果要将其转换为 int,请减去 0 char

      int x = (int) (cardArray[i] - '0');
      

      【讨论】:

      • 除了cardArray不包含字符。
      猜你喜欢
      • 2013-08-01
      • 2014-05-02
      • 1970-01-01
      • 1970-01-01
      • 2010-10-24
      • 2013-10-14
      • 2013-12-11
      • 2014-02-14
      相关资源
      最近更新 更多