2017-10-11 2 views
-3

Je suit déjà:billet au hasard avec if-else pour la loterie partiale

public class RandomTickets 
{ 
    public static void main(String[] args) 
    { 
     final int MIN = 0, MAX = 3; 
     int ticketQuant = ((int)(Math.random() * (MAX + 1 - MIN))) + MIN; 

     System.out.println(); 
     System.out.print("You have won " + ticketQuant); 
     System.out.println(ticketQuant == 1 ? " ticket." : " tickets."); 
     System.out.println(); 
    } 
} 

mais ce que je veux faire est de modifier le programme afin qu'il y ait:

  • 1 à 15 chance de gagner 3 billets
  • 2 en 15 chances de gagner 2 billets
  • 4 en 15 chances de gagner 1 billet

Et je veux utiliser des instructions de commutation.

Des idées ?!

+2

Que diriez-vous de générer un nombre compris entre 1 et 15 (inclus) à la place? Si le nombre est inférieur ou égal à 4, alors au moins un ticket a été gagné. Et ainsi de suite (nesting 'if' vérifie les deux autres conditions). –

+0

Comme un addendum à mon commentaire ci-dessus, l'utilisation d'un commutateur avec des cas de chute est la façon dont je le résoudrais. Un cas fréquent pour '4' et' 3', un pour '2', et enfin un pour' 1'. Chaque cas incrémente la variable "ticket" de un (initialement initialisé à zéro bien sûr). Après le changement, la variable "ticket" sera "1", "2" ou "3" avec les probabilités que vous voulez. –

+0

Ou peut-être que je me méprends sur vous et les probabilités? Peu importe, il suffit d'ajuster les conditions dans les instructions 'if' pour qu'il y ait exactement quatre nombres en cours de validité (par exemple' randomNumber> = 4 && randomNumber <= 7'). Peut encore être résolu avec un commutateur, mais maintenant il est plus logique d'utiliser 'if'. Vous pouvez toujours "tomber" avec le "si", en n'ayant pas de "else". Puis, comme pour les commutateurs de basculement, il suffit d'augmenter la variable "tickets" de un dans chaque "if". –

Répondre

0

solution très simple:

final Random random = new Random(); 
final int r = 1 + random.nextInt(15); 
final ticketCount; 

if (r <= 4) { 
    ticketCount = 1; 
} else if (r <= 6) { 
    ticketCount = 2; 
} else if (r <= 7) { 
    ticketCount = 3; 
} 

Un peu plus de fantaisie:

ticketCount = ((r^15) == 0 ? 3 : 0) + 
    (((r | 1)^9) == 0 ? 2 : 0) + 
    (((r | 3)^7) == 0 ? 1 : 0); 
0
// Designate numbers for each luck 
    final List<Integer> luck1OutOf15 = Arrays.asList(1); 
    final List<Integer> luck2OutOf15 = Arrays.asList(2, 3); 
    final List<Integer> luck4OutOf15 = Arrays.asList(4, 5, 6, 7); 

    final Random random = new Random(); 
    final int luck = random.nextInt(15) + 1; 
    final int ticketCount; 
    if (luck1OutOf15.contains(luck)) { 
     ticketCount = 3; 
    } else if (luck2OutOf15.contains(luck)) { 
     ticketCount = 2; 
    } else if (luck4OutOf15.contains(luck)) { 
     ticketCount = 1; 
    } else { 
     ticketCount = 0; 
    }