2012-10-28 74 views
1

所以即时通讯创建这个函数必须找到一个字符数组的整数平均值。查找字符数组中的整数平均值

这是我的数组char [] letters = {'A','B','C','D','E','F','G','H','I', 'J'};

我试图通过类型转换来找到像A = 32 j = 74这样的整数平均值。将整数值加回来并将其转回到一个字符中,但此时卡住了。

/******************************************************************************** 
This function will calculate the integer average of characters in the array 
********************************************************************************/ 
public static void average(char [] letters) 
{ 
    int total = 0; 

    char mean; 


    total = total + letters[letters.length]; 
    mean = (char)total/letters.length; 

    System.out.println("The value is " + average(letters)); 
} 
+0

你是否支持ISO-LATIN-1或Unicode中的重音字符? –

+1

很好使用unicode – javip

+0

你不能在字符中存储Unicode。 –

回答

2

这是不正确的:

total = total + letters[letters.length]; 

此操作可将过去值的阵列的端部到total,引发一个例外。

这里您需要一个循环:

for (int i = 0 ; i != letters.length ; i++) 
    total += letters[i]; 

您还可以使用for - in循环,就像这样:

for (char ch : letters) 
    total += ch; 

您还铸造total代替铸造分工的结果:

mean = (char)total/letters.length; 

应该被替换为

mean = (char)(total/letters.length); // Note the added parentheses 
+0

所以循环停止时,它不能等于10.所以我不需要typecast? – javip

+0

@javip不,你不需要演员。无论您通过多少物品,一旦“我”到达阵列的末端,循环都会停止。 – dasblinkenlight

+0

@javip你也可以使用另一种'for'循环,看看我的编辑。 – dasblinkenlight

0

这是一个练习如何做到这一点,为了做到这一点?如果不是,请使用Character数组并使用.digit()。

如果是这样,那么你是在正确的轨道上,但我的第一个想法是只是循环,减去适当的值,以将ASCII字符更改为数字,也许将它们粘在一个新的数组中,并再次循环到平均值。

老实说,我不明白你是如何尝试这与0循环。

1

首先 - 你的方法是递归的,它会中断。 我想你想把字符转换成十进制ASCII码。试试这个:

public static int average(char [] letters) 
{ 
    int total = 0; 

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

    return total/letters.length; //or cast it back to char if you prefer 
} 
+0

,一个void函数只是索引而不是返回权限? – javip

+0

当然,为什么不呢。或者你可以打印出主要方法中的值(假设你正在使用控制台程序),如下所示:System.out.println(average(targetedCharacterArray)+“”); – reederz