Quiero disminuir un valor en uno y si llega a cero, configúrelo al valor máximo. ¿Hay alguna forma de hacerlo mediante matemática sin recurrir a if (n-1 == 0) { n = max; }
¿Hay alguna manera de implementar esta lógica booleana muy simple usando solo operandos matemáticos (como mod)?
El escenario opuesto de aumentar un valor en uno y luego ponerlo en cero cuando es mayor que max puede lograrse fácilmente usando n = (n + 1) % (max + 1);
. Además, esto es aún mejor, ya que puede aumentar en cualquier cantidad (no solo uno) y todavía se "ajustará" correctamente.
Gracias por las respuestas hasta el momento. Para ser claros, quise decir sin ninguna lógica booleana (if/else) u operadores booleanos (!, & &, etc.) en absoluto. Solo tenía curiosidad sobre cómo hacer esto. ¿La respuesta correcta a continuación realmente lo hace más ilegible siempre que se proporcione un comentario? Sería necesario usar eso para el caso más general para restar un número arbitrario y esperar el ajuste correcto.
Ozan hace una buena pregunta a continuación. Por curiosidad, ¿es solo un acertijo lógico o hay alguna razón por la cual alguien debería evitar los constructos básicos del lenguaje? – MightyE
Ver arriba. Usar el si como eso solo funciona si resta uno, y no si está restando un número arbitrario y espera el mismo tipo de ajuste que el mod. – GreenieMeanie