Omlouvám se, ještě toto je část zadání a to jsem myslel tím, jak tam zadávat čísla.
Pro ovládání aplikace vytvořte jednoduché textové rozhraní.
Omlouvám se, ještě toto je část zadání a to jsem myslel tím, jak tam zadávat čísla.
Pro ovládání aplikace vytvořte jednoduché textové rozhraní.
Takto vypadá zadání:
Při řešení projektu se zaměřte na splnění následujících požadavků:
1. Soustřeďte se na návrh objektového modelu, který bude popisovat proces tahů, evidenci uskutečněných tahů, evidenci odevzdaných tiketů v každém kole a následného zjištění počtů výherců.
2. Předpokládejte, že připravenost osudí k zahájení tahu bude kontrolovat nezávislý dozor. Výběr míčku, který bude tažen, bude určen generátorem pseudonáhodných čísel. Vylosované míčky se do osudí nevrací.
3. V každém kole i za všechna uplynulá kola bude možné zjistit statistiku tahů – která čísla jsou tažena nejčastěji, která vůbec, která nejméně, kolik tiketů vyhrálo 1. pořadí – všechna uhodnutá čísla, kolik 2. pořadí …
4. Projekt musí obsahovat alespoň 3 třídy + minimálně 1 testovací třídu.
To co jsem postnul předtím jsem udělal jako 1 třídu v tom BlueJ. Druhou třídu, mám tu analýzu, pro zjišťování statistik, kolikrát jaké číslo bylo taženo.
To vypadá takto, ale to už mi nefunguje.
public class Analýza extends Sportka
{
/**
* Metoda pro analýzu - zjištění kolikrát bylo jaké číslo taženo.
*/
public void analyza()
{
int[] pomocneMicky = new int[zKolika];
//zpocitej kolikrat bylo ktere cislo tazeno
{
for (int y = 0; y < pocetTahu; y++ )
{
for (int x = 0; x < pocetTazenychCisel; x++)
{
int pomocnecislo = dataProAnalyzu[y][x];
pomocneMicky[pomocnecislo - 1]++;
}
}
}
//najdi 3x maximum a 3x minimum
{
int [] maximum = new int[3]; // pole uchovávající čísla míčků
int [] minimum = new int[3]; // pole uchovávající čísla míčků
for (int y = 0; y < 3; y++)
{
int a0 = 0;
int a1 = 0;
int z0 = pocetTahu + 1;
int z1 = pocetTahu + 1;
for (int x = 0; x < zKolika; x++)
{
int pomocnecislo0 = pomocneMicky[x]; // pomocné číslo 0 = počet vylosování
int pomocnecislo1 = x+1; // pomocné číslo 1 = číslo míčku
if (pomocnecislo0 > a0) //maximum
{
if ((pomocnecislo1 != maximum[0]) && (pomocnecislo1 != maximum[1]) && (pomocnecislo1 != maximum[2]))
{
a0 = pomocneMicky[x];
a1 = x+1;
maximum[y] = a1;
}
}
if (pomocnecislo0 < z0) //minimum
{
if ((pomocnecislo1 != minimum[0]) && (pomocnecislo1 != minimum[1]) && (pomocnecislo1 != minimum[2]))
{
z0 = pomocneMicky[x];
z1 = x+1;
minimum[y] = z1;
}
}
}
}
System.out.println("Nejcasteji tazene micky: " + (maximum [0] ) + "(" + pomocneMicky[(maximum [0]-1)] + "x), " +
(maximum [1] ) + "(" + pomocneMicky[(maximum [1]-1)] + "x), " +
(maximum [2] ) + "(" + pomocneMicky[(maximum [2]-1)] + "x), ");
System.out.println("Nejmene tazene micky: " + (minimum [0] ) + "(" + pomocneMicky[(minimum [0]-1)] + "x), " +
(minimum [1] ) + "(" + pomocneMicky[(minimum [1]-1)] + "x), " +
(minimum [2] ) + "(" + pomocneMicky[(minimum [2]-1)] + "x), ");
System.out.println();
}
}
}
To mi vypíše hlášku:
java.lang.ArrayIndexOutOfBoundsException: -1
A odsud už se nemohu hnout. Nevím jak to upravit a nevím, jak dodělat to, že tam jakoby ten sázející bude zadávat čísla, která budou ve ,,hře'' a aby se to vyhodnocovalo. To nevím, jak do toho zakomponovat. :-(
Takže. S pomocí kamaráda, kterej ale umí C++ jsem se snažil něco udělat a mám zhruba tohleto.
public class Sportka
{
//instanční proměnné
public int[] tazenaCisla; // Proměnná zastupuje pole tažených čísel
public int[] micky; // Proměnná zastupuje pole míčků v osudí
public Random nahoda;
public boolean pripraveno; // Určuje připravenost, či nepřipravenost losování
public int pocetTazenychCisel = 6; // Určuje, kolik čísel bude losováno
public int zKolika = 49; // Určuje z kolika čísel se bdue losovat
public int[][] dataProAnalyzu; // První pole zastupuje počet tahů, druhé pole zastupuje vylosovaná čísla
public int celkovyPocetTahu = 50; // Proměnná určující celkový počet tahů
public int pocetTahu; // Počítadlo tahů
/**
* Konstruktor pro objekt třídy Sportka
*/
public Sportka()
{
//inicializace instančních proměnných
tazenaCisla = new int [pocetTazenychCisel];
micky = new int [zKolika];
nahoda = new Random(); //vytvoří nový objekt typu Random
pripraveno = false;
dataProAnalyzu = new int[celkovyPocetTahu][pocetTazenychCisel];
pocetTahu = 0;
}
/**
* Konstruktor pro zjištění připravenosti, či nepřipravenosti losování
*/
public boolean priprav()
{
if(pocetTazenychCisel > zKolika) // Slouží ke kontrole počtu tažených čísel vůči celkovému počtu
{
pripraveno = false;
System.out.println("NEpřipraveno pro losování - má být losováno " + pocetTazenychCisel
+ " micku z " + zKolika + " !");
}
else
{
if (pocetTahu < celkovyPocetTahu)
{
pripraveno = true;
System.out.println("Připraveno pro losování.\nV následujicím tahu (tah č. " + (pocetTahu +1) + ") padly tato čísla: ");
}
else
{
pripraveno = false;
System.out.println("NEpřipraveno pro losování - maximální počet tahů dosažen(" + celkovyPocetTahu + ")!");
}
}
return pripraveno;
}
/**
* Metoda pro inicializaci osudí
*/
public void reset() // Inicializujeme osudí
{
for (int x = 1; x <= zKolika; x++)
{
micky[x-1] = x; // Přiřazujeme číselnou hodnotu jednotlivým míčkům
}
}
/**
* Metoda pro vygenerování náhodného čísla
*/
public int tah() // Vrátí nám náhodně generované číslo
{
return nahoda.nextInt(zKolika) + 1;
}
/**
* Metoda pro losování čísel
*/
public void losovani()
{
if (pripraveno)
{
pocetTahu++;
int vylosovaneCislo; // Zde se ukládá vylosované číslo
reset(); // Přiřadí míčkům hodnoty
for (int x = 0; x < pocetTazenychCisel; x++)
{
vylosovaneCislo = tah(); // Výsledek metody tah, je uložen do lokální proměnné pomocná
while (micky[vylosovaneCislo-1] == 0)
{
vylosovaneCislo = tah();
}
micky[vylosovaneCislo-1] = 0; // K vylosovanému číslu, je přiřazena hodnota nula, aby nemohlo být znovu v daném tahu taženo
tazenaCisla[x] = vylosovaneCislo; // Vylosované číslo je uloženo do pole tažených čísel
System.out.print(vylosovaneCislo + ", ");
}
pridejCisla(tazenaCisla);
pripraveno = false;
System.out.println("");
}
else
{
System.out.println("Osudí není připraveno!");
System.out.println();
}
}
/**
* Metoda přidej čísla
*/
private void pridejCisla(int[] cisla) // Shromažďuje data pro následnou analýzu
{
if (pocetTahu <= celkovyPocetTahu)
{
for (int x = 0; x < pocetTazenychCisel; x++)
{
dataProAnalyzu[pocetTahu-1][x] = cisla[x];
}
}
}
/**
* Metoda pro losování
*/
public void losujNekolikrat(int kolikrat)
{
for (int x = 1; x <= kolikrat; x++)
{
priprav();
losovani();
}
}
}
V tuhle chvíli mi to vyhazuje ty pseudonáhodná čísla (6 čísel ze 49).
Zdravím všechny.
Dostal jsem zadání na semestrální práci na vysoké škole na téma ,,Losování''. Má to být jako Sportka. Na střední škole jsem programování vůbec neměl a nyní to mám prvně a absolutně v tom plavu. Něco jsem zkoušel sám udělat, pomocí různých návodů, různých materiálů z internetu, ale prostě se nechytám :-(. Byl by zde někdo ochotný mi pomoci udělat tuto semestrální práci a případně nějak vysvětlit?
Děláme v programu BlueJ. Kdyby náhodou někdo byl tak ochotný, mohu zde uvést nějaký kontakt (Facebook/ICQ/Skype/e-mail) a nějak se domluvíme a případně pošlu celé zadání.
Předem děkuji za všechny odpovědi.