2012-10-28 72 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