Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich soll eine Lottoziehung realisieren, habe die automatisch generierten Zahlen in einem HashSet abgelegt und möchte diese Zahlen nun weiterverwenden. Dazu benötige ich sie aber in einem int Array, damit ich die gezogenen Zahlen mit den getippten Zahlen vom Typ int vergleichen kann.
Gibt's da irgendne Möglichkeit? Hab irgendwo was mit CopyTo gefunden, konnte es aber leider nicht so wirklich umsetzten, weil diese Methode irgendeine Klasse implementieren muss oder so... *bahnhof*
Ich hoffe, ihr könnt mir weiterhelfen.
Vielen Dank für eure Bemühungen.
import java.util.*;
import javax.swing.JOptionPane;
public class Ziehung {
public static Object[] zieheZahlen(){
/**Definition der Variablen*/
int zahlGeneriert, zahlManuell;
String artDerZiehung, zahlEingabe;
Integer aktuell;
HashSet gezogen = new HashSet();
/* Eingabe durch Benutzer, die über Art der Ziehung entscheidet
* Die folgenden Eingaben führen zu folgendem Ergebnis:
* ja Ziehung erfolgt durch Zufallsgenerator
* nein ein Eingabefenster zur Eingabe der 5 Lotto-Zahlen öffnet sich
*/
artDerZiehung = JOptionPane.showInputDialog("Soll die Lotto-Ziehung\ndurch einen " +
"Zufallsgenerator erfolgen, \nantworten Sie mit ja. \nMöchten Sie die Zahlen " +
"von Hand eingeben, \nso antworten Sie mit nein.\n\n" +
"Sollen die Lotto-Zahlen automatisch generiert werden?");
if (artDerZiehung == "ja"){
//Da jede Zahl nur einmal in der Ziehung vorkommen darf, benutzen wir die Klasse HashSet//
Random generator = new Random();
while (gezogen.size()<5) {
zahlGeneriert = generator.nextInt(36);
if (zahlGeneriert == 0)
//0 soll nicht mitgezogen werden//
continue;
//Zahl wird gezogen//
aktuell = new Integer (zahlGeneriert);
gezogen.add(aktuell);
}
}
else
{
for (int i= 1;gezogen.size()<5;i++) {
zahlEingabe = JOptionPane.showInputDialog("Bitte geben Sie die "+i+". Zahl der Tsuki-Ziehung ein:");
zahlManuell = Integer.parseInt(zahlEingabe);
if (zahlManuell <= 0 || zahlManuell > 36 )
//Zahlen kleiner gleich 0 oder größer 36 sollen nicht mitgezogen werden//
{i--;
continue;}
//Zahl wird gezogen//
aktuell = new Integer (zahlManuell);
gezogen.add(aktuell);
}
}
return gezogen.toArray();
}
}
Hier die Hauptklasse:
Code:
/**
* Hauptklasse
*
*/
public class Lotto {
// parameter zu Testzwecken; müsste später eingegeben werden können
// und genau in dem int[] ZIEHUNG sollen die gezogenen Zahlen landen...
// die nachfolgenden Methoden sind in anderen Klassen definiert
public static int[] ZIEHUNG;
public static int JACKPOT = 1000;
/**
* @param args
*/
public static void main(String[] args) {
String eingabe;
eingabe = JOptionPane.showInputDialog("Bitte geben Sie den Dateinamen des einzulesenden Scans wie folgt ein: Dateiname.txt ");
File einleseDatei = new File(eingabe);
AusschuettungsData data = DocumentReader.readTipps(einleseDatei);
data.setZiehung(ZIEHUNG);
List scheine = data.getScheine();
data.setJackpotAlt(JACKPOT);
// Berechne Einnahmen
for (int i = 0; i < scheine.size(); i++) {
TippSchein schein = (TippSchein) scheine.get(i);
// hole Einnahmen
data.setEinnahmen5(data.getEinnahmen5()
+ schein.getEinnahnenFuer5());
data.setEinnahmenDif(data.getEinnahmenDif()
+ schein.getEinnahnenFuerDif());
data.setEinnahmenQuad(data.getEinnahmenQuad()
+ schein.getEinnahnenFuerQuad());
}
double neuerJackpot = 0;
// Berechne Anzahl 3 richtige
int gesamt3richtige = 0;
for (int i = 0; i < scheine.size(); i++) {
TippSchein schein = (TippSchein) scheine.get(i);
gesamt3richtige += schein.getAnzahl3Richtige(ZIEHUNG);
}
data.setGewinner3(gesamt3richtige);
// setze Gewinne 3 richtige
if (gesamt3richtige == 0) // keiner hat hier gewonnen
neuerJackpot += data.getAusschuettungProVariante();
else {
for (int i = 0; i < scheine.size(); i++) {
TippSchein schein = (TippSchein) scheine.get(i);
schein.setGewinn(schein.getGewinn() + data.getGewinnBei3()
* schein.getAnzahl3Richtige(ZIEHUNG));
}
}
// Berechne Anzahl 4 richtige
int gesamt4richtige = 0;
for (int i = 0; i < scheine.size(); i++) {
TippSchein schein = (TippSchein) scheine.get(i);
gesamt4richtige += schein.getAnzahl4Richtige(ZIEHUNG);
}
data.setGewinner4(gesamt4richtige);
// setze Gewinne 4 richtige
if (gesamt4richtige == 0) // keiner hat hier gewonnen
neuerJackpot += data.getAusschuettungProVariante();
else {
for (int i = 0; i < scheine.size(); i++) {
TippSchein schein = (TippSchein) scheine.get(i);
schein.setGewinn(schein.getGewinn() + data.getGewinnBei4()
* schein.getAnzahl4Richtige(ZIEHUNG));
}
}
// Berechne Anzahl 5 richtige
int gesamt5richtige = 0;
for (int i = 0; i < scheine.size(); i++) {
TippSchein schein = (TippSchein) scheine.get(i);
gesamt5richtige += schein.getAnzahl5Richtige(ZIEHUNG);
}
data.setGewinner5(gesamt5richtige);
// setze Gewinne 5 richtige
if (gesamt5richtige == 0) // keiner hat hier gewonnen
neuerJackpot += data.getAusschuettungProVariante();
else {
for (int i = 0; i < scheine.size(); i++) {
TippSchein schein = (TippSchein) scheine.get(i);
schein.setGewinn(schein.getGewinn() + data.getGewinnBei5()
* schein.getAnzahl5Richtige(ZIEHUNG));
}
}
// Berechne Anzahl Differenz richtige
int gesamtDifrichtige = 0;
for (int i = 0; i < scheine.size(); i++) {
TippSchein schein = (TippSchein) scheine.get(i);
gesamtDifrichtige += schein.getAnzahlDifRichtige(ZIEHUNG);
}
data.setGewinnerDif(gesamtDifrichtige);
// setze Gewinne Dif richtige
if (gesamtDifrichtige == 0) // keiner hat hier gewonnen
neuerJackpot += data.getAusschuettungProVariante();
else {
for (int i = 0; i < scheine.size(); i++) {
TippSchein schein = (TippSchein) scheine.get(i);
schein.setGewinn(schein.getGewinn() + data.getGewinnBeiDif()
* schein.getAnzahlDifRichtige(ZIEHUNG));
}
}
// Berechne Gewinn für Quadwin
int gesamtQuadrichtige = 0;
for (int i = 0; i < scheine.size(); i++) {
TippSchein schein = (TippSchein) scheine.get(i);
gesamtQuadrichtige += schein.getAnzahlQuadRichtige(ZIEHUNG);
}
data.setGewinnerQuad(gesamtQuadrichtige);
// setze Gewinne Quad richtige
if (gesamtQuadrichtige == 0) // keiner hat hier gewonnen
neuerJackpot += data.getAusschuettungProVariante();
else {
for (int i = 0; i < scheine.size(); i++) {
TippSchein schein = (TippSchein) scheine.get(i);
schein.setGewinn(schein.getGewinn() + data.getGewinnBeiQuad()
* schein.getAnzahlQuadRichtige(ZIEHUNG));
}
}
Ausgabe.erstelleGewinnveroeffentlichung(data);
for (int i = 0; i < scheine.size(); i++) {
TippSchein schein = (TippSchein) scheine.get(i);
System.out.println("NAME = " + schein.getName());
System.out.println("3 richtige: "
+ schein.getAnzahl3Richtige(ZIEHUNG));
System.out.println("4 richtige: "
+ schein.getAnzahl4Richtige(ZIEHUNG));
System.out.println("5 richtige: "
+ schein.getAnzahl5Richtige(ZIEHUNG));
System.out.println("Dif richtige: "
+ schein.getAnzahlDifRichtige(ZIEHUNG));
System.out.println("Quad richtige: "
+ schein.getAnzahlQuadRichtige(ZIEHUNG));
System.out.println("GEWINN: " + schein.getGewinn());
}
System.out.println("Neuer Jackpot: " + neuerJackpot);
}
}
..nun das Problem ist folgendes:
Du versuchst aus einer HashMap (HashSet) ein Array von integern zu übergeben und übergibst aber eine Refferenz von Interger-Objeketen!
Die Funktion .toArray liefer ja nicht zwangsläufig, das was Du willst. Siehe:
Die toArray()-Methode aus der Schnittstelle Collection gibt laut Definition ein Array von Objekten zurück. Es ist wichtig zu verstehen, welchen Typ die Einträge und das Array selbst haben.
Wow, ist das viel Fachliteratur...Leider steige ich da nicht so ganz durch als Laie...
Also dass toArray mir dann ein Object [] liefert, ist mir auch schon aufgefallen, aber wie kann ich denn jetzt gewährleisten, dass die 5 Zahlen, die in meinem HashSet gelandet sind, nun in ein int[] übergeben werden, damit alle Methoden mit int[] ZIEHUNG funktionieren?
..das warum dazu kannst in dem von mir voreher geposteten Link nachlesen!
Außerdem würde ich Dir diese Buch ohnehin ans Herz legen!
Eines der wenigen verpflichteten Werke für Java!
Aber wenn ich Int verwende, gibt er die Fehlermeldung: Int cannot be resolved to a type.
Mache ich daraus Integer (was wahrscheinlich der falsche Typ ist), nimmt er es in der Klasse Ziehung zwar an, aber wenn ich dann in der Hauptklasse sage:
Okay, das klappt soweit. Allerdings kann ich dann meine Methoden, wie getZiehung oder set.Ziehung, die in der Klasse unten beschrieben ist immer noch nicht auf MeineZiehung anwenden...
Code:
import java.util.ArrayList;
import java.util.List;
/**
* Menge von aus einer Datei eingelesenen Tippscheinen
*
*/
public class AusschuettungsData {
/**
* Liste von <code>TippSchein</code>en
*/
private List scheine = new ArrayList();
private int[] ziehung;
private String Datum;
private int einnahmen5;
private int einnahmenDif;
private int einnahmenQuad;
private double jackpotAlt;
private int gewinner3;
private int gewinner4;
private int gewinner5;
private int gewinnerQuad;
private int gewinnerDif;
private double jackpotNeu;
public double getAusschuettungProVariante() {
return getGesamtAusschuettung() / 5;
}
// Müsste hier nicht nur durch 2 geteilt werden, wenn Gesamtausschüttung ermittelt werden soll?
public double getGesamtAusschuettung() {
return ( einnahmen5 + einnahmenDif + einnahmenQuad ) / 5 + jackpotAlt;
}
public double getGewinnBei3() {
if (gewinner3 == 0)
return 0;
return getAusschuettungProVariante() / gewinner3;
}
public double getGewinnBei4() {
if (gewinner4 == 0)
return 0;
return getAusschuettungProVariante() / gewinner4;
}
public double getGewinnBei5() {
if (gewinner5 == 0)
return 0;
return getAusschuettungProVariante() / gewinner5;
}
public double getGewinnBeiDif() {
if (gewinnerDif == 0)
return 0;
return getAusschuettungProVariante() / gewinnerDif;
}
public double getGewinnBeiQuad() {
if (gewinnerQuad == 0)
return 0;
return getAusschuettungProVariante() / gewinnerQuad;
}
// eventuelle Umbennennung in tatsächlichGewonneneSumme
public double getGewonnenSumme() {
return getGesamtAusschuettung() - jackpotNeu;
}
public double getJackpotNeu() {
return jackpotNeu;
}
public void setJackpotNeu(double jackpotNeu) {
this.jackpotNeu = jackpotNeu;
}
public String getDatum() {
return Datum;
}
public void setDatum(String datum) {
Datum = datum;
}
public List getScheine() {
return scheine;
}
public void addSchein (TippSchein schein) {
scheine.add(schein);
}
public int getEinnahmen5() {
return einnahmen5;
}
public void setEinnahmen5(int einnahmen5) {
this.einnahmen5 = einnahmen5;
}
public int getEinnahmenDif() {
return einnahmenDif;
}
public void setEinnahmenDif(int einnahmenDif) {
this.einnahmenDif = einnahmenDif;
}
public int getEinnahmenQuad() {
return einnahmenQuad;
}
public void setEinnahmenQuad(int einnahmenQuad) {
this.einnahmenQuad = einnahmenQuad;
}
public int getGewinner3() {
return gewinner3;
}
public void setGewinner3(int gewinner3) {
this.gewinner3 = gewinner3;
}
public int getGewinner4() {
return gewinner4;
}
public void setGewinner4(int gewinner4) {
this.gewinner4 = gewinner4;
}
public int getGewinner5() {
return gewinner5;
}
public void setGewinner5(int gewinner5) {
this.gewinner5 = gewinner5;
}
public int getGewinnerDif() {
return gewinnerDif;
}
public void setGewinnerDif(int gewinnerDif) {
this.gewinnerDif = gewinnerDif;
}
public int getGewinnerQuad() {
return gewinnerQuad;
}
public void setGewinnerQuad(int gewinnerQuad) {
this.gewinnerQuad = gewinnerQuad;
}
public double getJackpotAlt() {
return jackpotAlt;
}
public void setJackpotAlt(double jackpotAlt) {
this.jackpotAlt = jackpotAlt;
}
public int[] getZiehung(){
return ziehung;
}
public void setZiehung(int[] ziehung){
this.ziehung = ziehung;
}
}
Okay, ich habe versucht, die dritte Lösungsvariante umzusetzen. Die Betonung liegt dabei leider auf versucht.
Wie muss ich meinen Methodenaufruf in der Klasse Ziehung wählen, um die Zufallszahlen zu generieren?
(Bisheriger Stand:
Code:
public static HashSet zieheZahlen(){
Was gebe ich dann bei dieser Methode zurück?
Bisher:
Code:
return gezogen
Wie wandle ich mein HashSet gezogen in ein int [] ZIEHUNG um?
Muss ich dann in der Klasse Ziehung eine getter-Methode anlegen? Etwa so?
Code:
public static getGezogen(){
return gezogen;
}
Es tut mir Leid, dass ich so unwissend bin...eigentlich macht es Spaß zu programmieren. Aber wenn einem die Vokabeln und Hintergründe fehlen (by the way: ich habe bereits 2 Bücher zum Thema Java gelesen).
Danke für's Verständnis und die bisherige Hilfe!!!
Ja, genau an dieses Problem bin ich auch schon gestoßen.
Wir sollen mit 1.4 arbeiten, weil wir das auch in der Vorlesung hatten.
Wenn ich jetzt dennoch die neuere Version nehme, funktionieren einige Sachen dort nicht mehr. Darum möchte ich eigentlich schon gerne 1.4 beibehalten.
..würde sagen registrier Dich und schick mir dann per PM ne Nachricht!
Dann bekommst meine MailAdresse und Du kannst mir das Projekt seneden!
Ich guck mir dann an, wo der Hund begraben liegt!