2017-08-03 8 views
1

Disons que j'ai un court [] thisArray dans JAVA, et j'ai besoin de calculer la moyenne basée sur la quantité d'éléments dans ce tableau. Mais apparemment, .length retournera un nombre entier pour représenter la longueur de thisArray.Calcul de la moyenne d'un tableau de type court dans JAVA

Je ne peux pas le convertir en int Array ou int, car il n'est pas autorisé à convertir int en short. J'ai besoin d'avoir un résultat court et de stocker dans un autre short [] [].

Comment éviter cette erreur classique: erreur: types incompatibles: la conversion possible de lossy int à court court result = somme/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

Question: 'courte somme = 0;' Est-ce que la somme de deux ints court toujours adapter dans un autre short int? – markspace

Répondre

3

Si vous savez que la moyenne peut entrer dans une variable courte, il vous suffit de jeter le résultat:

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

Je voudrais aussi changer sum à int, pour réduire le risque de débordement (qui peut se produire si la somme est supérieure à 32767).

Pour résumer:

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

La moyenne d'un tableau court peut toujours tenir dans une variable courte, la somme du tableau court peut ne pas être en mesure de le faire. – Will

+0

@Will Oui, c'est correct. – Eran

1

Vous devez jeter explicitement le résultat

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

Le compilateur vous protège de perdre des données lorsque vous attribuez une valeur à une variable intshort. Fournir la distribution est la façon habituelle de dire au compilateur que vous savez ce que vous faites, et cette opération est OK.