2017-10-11 1 views
-3

Ich habe folgende schon:Zufallsticket mit if-else für voreingenommen Lotterie

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(); 
    } 
} 

aber was ich tun möchte, ist das Programm so zu ändern, dass es:

  • 1 in 15 Gewinnchance 3 Tickets
  • 2 in 15 Gewinnchance 2 Tickets
  • 4 in 15 Gewinnchance 1 Ticket

Und ich möchte Switch-Anweisungen verwenden.

Irgendwelche Ideen ?!

+2

Wie wäre es eine Zahl zwischen 1 und 15 (einschließlich), anstatt zu erzeugen? Wenn die Zahl kleiner oder gleich "4" ist, wurde mindestens ein Ticket gewonnen. Und so weiter (Verschachtelung 'if' prüft auf die anderen beiden Bedingungen). –

+0

Als Ergänzung zu meinem obigen Kommentar ist die Verwendung eines Schalters mit Fall-Through-Fällen die Art und Weise, wie ich es lösen würde. Ein häufiger Fall für "4" und "3", einer für "2" und schließlich einer für "1". In jedem Fall wird die "ticket" -Variable um eins erhöht (natürlich zunächst auf Null initialisiert). Nach dem Wechsel wird die "Ticket" -Variable "1", "2" oder "3" mit den gewünschten Wahrscheinlichkeiten sein. –

+0

Oder vielleicht missverstehen Sie mich und die Wahrscheinlichkeiten? Egal, passen Sie einfach die Bedingungen in den 'if'-Anweisungen an, so dass genau vier Zahlen gültig sind (zum Beispiel 'randomNumber> = 4 && randomNumber <= 7'). Kann noch mit einem Schalter gelöst werden, aber jetzt macht es ein wenig mehr Sinn, 'if' zu verwenden. Sie können immer noch mit dem 'if'" durchfallen ", indem Sie kein" else "haben. Dann wie bei den Fall-Through-Switch-Fällen erhöhen Sie einfach die Variable "Tickets" um eins in jedem "if". –

Antwort

0

Sehr einfache Lösung:

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; 
} 

Ein bisschen mehr Phantasie:

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; 
    }