【问题标题】:Sum of char array in JavaJava中char数组的总和
【发布时间】:2015-12-06 10:07:05
【问题描述】:

我在计算 char 数组中元素的总和时遇到了一些麻烦。我试过这样,但它没有达到我的预期:

int count1=0;
    char [] charArray1={1,2,35,0};
    for (int i =0; i<charArray.length; i++){

        count1=count1+charArray1[i];

    }

我遇到了异常:

线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 105 在 CountDigits.main(CountDigits.java:31)

有什么提示吗?

【问题讨论】:

  • 您是否要计算数组中数字的总和?
  • 你知道'i' 是一个字符文字吗?它不能用作数组索引。我认为您需要再次回到基础。
  • 如果我将char数组转换为int数组,我会失去准确性吗?或者这是个坏主意?
  • 是的,我要计算char数组中的元素。
  • 如果这个for (int i =0; i&lt;charArray.length; i++) 不打算使用charArray1.length?

标签: java arrays char


【解决方案1】:

在第一个位置,如果您的数据是纯数字的,您应该使用int 数组而不是char 数组。

int[] data = {1,2,35,0};

其次,您在迭代中的添加不正确。

int sum;
for(int x=0; x<data.length ;x++)
    sum += data[x];    //This is enough to get the sum.

目前,我想不出任何好的理由使用 char 数组来存储数字数组。但如果你因为一些神秘的原因必须这样做,你可以这样做。

char[] data = {'1', '2', '3', '0'};  //Enclose each char with single quote
int sum;
for(int x=0; x<data.length ;x++)
    sum += Character.getNumericValue(data[x]);    //Convert char to int before summing

【讨论】:

  • 但是如果我想识别每个字符,然后计算总和,你能做什么?所以这意味着 int 不这样做!
  • @user1364513 如果您出于某些原因不得不使用 char 数组,则必须先将它们中的每一个转换为 int,然后再进行汇总。
  • 那你觉得准确性怎么样?如果我从char转换为int?不会丢东西吗?
  • java 中的 char 是 16 位,而 int 是 32 位。你不应该失去精确度。 int x = Character.getNumericValue(char)
  • @user1364513 除非您使用不同的编码,否则可能会有(需要确认)。但通常你不会失去任何东西。
【解决方案2】:

您需要按如下方式更改 for 循环,我将 charArray 更改为 charArray1 并插入 for 循环

 for (int i =0; i<charArray1.length; i++){
        count1=count1+charArray1[i];
 }

【讨论】:

    【解决方案3】:
    count1=charArray1['i']+charArray1['i']; is wrong. 
    

    你需要的是

    count1 = count1 + charArray1[i];
    

    【讨论】:

    • 是的,但是说什么你改变了,以及为什么会更有用。
    • @T.J.Crowder 很好的回答是不言自明的 :) 虽然显然我的不是
    • @gefei:如果你有并排差异,是的……否则通常没有
    【解决方案4】:

    改变这个 -

    for (int i = 0; i < charArray.length; i++){
        count1 = charArray1['i'] + charArray1['i'];
    }
    

    到这里-

    for (int i = 0; i < charArray.length; i++){
        count1 = count1 + charArray1[i];
    }
    

    在 Java 中,我们不能使用字符或字符串文字来索引数组。只允许数字。由于i是整数,所以需要直接作为索引使用。

    正如 T. J. Crowder 在评论中指出的那样 - 为了获得所有数字的总和,您需要一个称为 accumulator 的东西,您将在其中收集总和的结果。在每次循环迭代中,您需要将下一个元素添加到此累加器结果中,以便最终保存 -

    的结果
    charArray1[0] + charArray1[1] + charArray1[2] + charArray1[3]
    

    【讨论】:

    • 您可能想提及您所做的第二个更改(以及原因)。
    【解决方案5】:

    试试:

        public int add(char[] numbers) {
        int result = 0;
        for (char i : numbers) {
            if(Character.isDigit(i)){
                result += Character.getNumericValue(i);
            }
        }
        return result;
        }
    

    【讨论】:

      【解决方案6】:

      回答有点晚了,但是,将您的代码更改为以下内容 -

       int count1 = 0;
       char [] charArray1 = {1,2,35,0};
       for (int i =0; I < charArray1.length; i++)
       {
       count1 = count1 + charArray1[i];
       }
        
       System.out.println("sum is " + count1);
      

      此代码可以进一步优化,但如果您只是想修复错误,请尝试以下操作。

      【讨论】:

        猜你喜欢
        • 2016-11-07
        • 2016-05-17
        • 2014-01-28
        • 2014-02-08
        • 1970-01-01
        • 2013-12-19
        • 2013-10-29
        • 1970-01-01
        • 2017-09-13
        相关资源
        最近更新 更多