Comment trouver la différence de 2 valeurs avec les valeurs de débordement/suremballage, module
-
20-12-2019 - |
Question
Disons que j'ai une limite de 5 valeurs de signification de 0,1,2,3,4,5
La différence avec (5 to 0)
ou (5 to 0)
est 1
La différence avec (5 to 1)
ou (1 to 5)
est 2
La différence avec (0 to 4)
ou (4 to 0)
est 2
La façon dont je semble comprendre cela est de n'utiliser la différence de suremballage que si la dernière valeur ou la première valeur est utilisée dans l'une des valeurs.À part ceux normaux qui fonctionnent avec Math.abs
ça devrait aller
Tel que Math.abs(1-3)
La différence avec (1 to 3)
est 2
La différence avec (3 to 4)
est 1
Je n'arrive pas à comprendre comment programmer la partie différence de suremballage.
J'ai essayé ça mais ce n'est rien de spécial, je pense que quelque chose avec l'opérateur module fonctionnera mais je n'arrive pas à le comprendre
int value_one = 0;
int value_two = 5;
int answer = Math.abs(value_one - value_two);
answer = (((answer % 5) + 5) % 5) + 1;
System.out.println(answer);
int answer2 = (value_one + value_two) % 5;
System.out.println(answer2);
La solution
int v1 = Math.min(value_one, value_two);
int v2 = Math.max(value_one, value_two);
int answer = Math.min(v2 - v1, v1 + values.length - v2);
où valeurs.longueur est la longueur de {0, 1, 2, 3, 4, 5} qui est 6.