Desidero ridurre un valore di uno e se raggiunge zero, impostarlo sul valore massimo. C'è un modo per farlo via matematica senza ricorrere a if (n-1 == 0) { n = max; }
C'è un modo per implementare questa logica booleana molto semplice usando solo gli operandi matematici (come la mod)?
Lo scenario opposto di aumentare un valore di uno e impostarlo su zero quando è maggiore di max può essere facilmente ottenuto utilizzando n = (n + 1) % (max + 1);
. Inoltre, questo è ancora meglio visto che puoi aumentare di qualsiasi importo (non solo uno) e continuerà a "avvolgere" correttamente.
Grazie per le risposte finora. Per intenderci, intendevo senza logica booleana (se/else) o operatori booleani (!, & &, ecc.). Ero solo curioso di sapere come farlo. La risposta corretta sotto rende davvero illeggibile finchè viene fornito un commento? Sarebbe necessario usarlo per il caso più generale per sottrarre un numero arbitrario e aspettarsi il giusto avvolgimento.
Ozan fa una buona domanda qui sotto. Per curiosità, questo è solo un puzzle logico, o c'è una ragione per cui qualcuno dovrebbe evitare i costrutti del linguaggio di base? – MightyE
Vedi sopra. Usare il if like funziona solo se ne stai sottraendo uno, e non se stai sottraendo un numero arbitrario e ti aspetti lo stesso tipo di wrap-around di mod. – GreenieMeanie