2017-08-03 7 views
1

JAVAでshort [] thisArrayがあり、この配列の要素の量に基づいて平均を計算する必要があるとします。しかし、明らかに.lengthはthisArrayの長さを表すint値を返します。JAVAのshort型配列の平均を計算する

intをintに変換することはできません。intをintに変換することはできません。私は短い結果を持って別の短い[] []に戻す必要があります。

この古典的なエラーを回避する方法: エラー:互換性のないタイプ:intからshortへの不可逆変換 short result = sum/thisArray.length;

public static short getSum(short[] sumArray) { 
    short sum = 0; 
    for(short i : sumArray) { 
    sum += i; 
    } 
    return sum; 
} 

sum = getSum(thisArray); 

short result = sum/thisArray.length; 
+1

質問: '短い合計= 0;'二つの短いint型の合計は常に別のshort int型の内側にフィットしていますか? – markspace

答えて

3

あなたは平均が短い変数に収まることができることを確認するために知っている場合は、あなただけの結果をキャストする必要があります。

short result = (short)(sum/thisArray.length); 

私も(オーバーフローの危険性を減らすために、intsumを変更したいです合計が32767より大きい場合に発生する可能性があります)。

を要約すると:

public static int getSum(short[] sumArray) { 
    int sum = 0; 
    for(short i : sumArray) { 
    sum += i; 
    } 
    return sum; 
} 

... 

int sum = getSum(thisArray); 

short result = (short) (sum/thisArray.length); 
+0

短い配列の平均は、短い変数に常に収まるため、短い配列の合計はできません。 – Will

+0

@ウィルはい、そうです。 – Eran

1

あなたは明示的に結果

short result = (short)(sum/thisArray.length); 

コンパイラはあなたがshort変数にint値を代入するときにデータを失うことからあなたを保護しているにキャストする必要があります。キャストを提供することは、あなたが何をしているのかをコンパイラに伝える通常の方法です。この操作は問題ありません。