Hledání duplicit v poli – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Hledání duplicit v poli – Java – Fórum – Programujte.comHledání duplicit v poli – Java – Fórum – Programujte.com

 

rotom0
Duch
7. 12. 2014   #1
-
0
-

Zdravím,

mám zadání:

Sestavte program, který vygeneruje 6 čísel do hry SPORTA. Výsledná čísla uložte do pole a obsah pole pak vytiskněte na obrazovku. Pro zjištění duplicity hodnot sestavte vlastní logickou metodu.

Vytiskněte každé vygenerované číslo a vypočítejte, kolik bylo nutné vygenerovat čísel, abychom dostali výsledek, tj. 6 různých čísel z intervalu <1,49> . 

Nabídněte možnost celý výpočet opakovat.

Mám hotovo:

public class neco  {
    public static void main (String [] args) {
        int [] a = new int [6];
        int o;
        do {
        
        for (int i = 0; i < a.length; i++){
        
        a[i] = (int)(Math.random() *49 + 1);
        
        }
        
        for (int i = 0; i < a.length; i++){
            
        System.out.print(a [i] + " ");    
        }System.out.println();
                          
        
        System.out.println("Chcete opakovat vypocet? 1 = ano, ostatni = ne:");
        o = VstupDat.ctiInt ();    
        } while (o == 1);        
    }
}

Což mi dává náhodná čísla do pole, nabízí mi opakování celé akce, ale potřebuji pohnout s tou kontrolou duplicit a počítáním vygenerovaných čísel.

Jsem začátečník a budu rád za každou radu. Díky.

Nahlásit jako SPAM
IP: 89.29.71.–
ingiraxo+15
Grafoman
7. 12. 2014   #2
-
0
-

#1 rotom
pokud chápu správně, tak kontrola duplicit se má provádět při každém vloženém číslu do pole? pokud ano, tak prostě pokaždy projdeš pole, jestli nové číslo tam už existuje

pokud se má kontrola dělat až na konci, kdy je pole plné, tak si budeš ukládat čísla do pomocnýho pole a kontrolovat duplicity tam (nebo pouziješ 2 cykly)

a moc nerozumim tomu zadání,.. máš vygenerovat 6 čísel a potom z kontrolovat duplicity ak čemu je teda to počítání vygenerovaných čísel o kterým píšeš?

jinak to co máš, se dá zkrátit jako 

public static void main(String[] args)
{
    final Scanner sc = new Scanner(System.in);
    int[] a = new int[6];

    do {
        for (int i = 0; i < a.length; i++) {
            a[i] = (int) (Math.random() * 49 + 1);
            System.out.print(a[i] + " ");
        }
        System.out.println("\nChcete opakovat vypocet? 1 = ano, ostatni = ne:");
    } while (sc.nextLine().equals("1"));
}
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
rotom0
Duch
7. 12. 2014   #3
-
0
-

Taky jsem na to zadání koukal, není z mojí hlavy.

Podle toho, co píšeš, v prvním případě kontroly, by se dalo "nějak" spočítat, kolik bylo nutné vygenerovat čísel, aby se naplnilo pole. Netuším jak, jen se snažím nad tím přemýšlet.

A když už jsme u toho, jak mám rozsegmentovat generování šesti čísel abych je mohl porovnávat s ostatními.

Nahlásit jako SPAM
IP: 89.29.71.–
ingiraxo+15
Grafoman
7. 12. 2014   #4
-
0
-

#3 rotom
podle mě to je tak, že budeš čísla generovat v tom rozmezí postupně (jako to máš teď) a vždy si zkontroluješ, jestli vygenerované číslo v poli již existuje, pokud ne, tak ho přidáš a generuješ další.. pokud tam bude existovat (což zjistíš vlastní metodou), tak se pokusíš vygenerovat číslo znovu

to počítadlo je jen počet vygenerování, tzn. že min. bude 6 a v případě, že číslo existuje, tak se generování aktuálního čísla spustí znovu a počítadlo zvedneš

tvuj poslední dotaz nechápu, prostě projdeš pole a zkontroluješ existenci čísla (samozřejmě to číslo do pole nebudeš vkládat, dokud si nezjistil jeho exitenci)

public class Demo
{
    private static final int NUMBERS_COUNT = 6;

    private static Scanner scanner = new Scanner(System.in);
    private static int[] numbers = new int[NUMBERS_COUNT];
    private static int top;
    private static int genCounter;

    private static void prepareNumbers()
    {
        for (int i = 0; i < numbers.length; i++) {
            int genNum;
            do {
                genNum = generate();
            } while (isDupe(genNum));
            numbers[top++] = genNum;
        }
    }

    private static void clear()
    {
        genCounter = 0;
        top = 0;
    }

    private static int generate()
    {
        genCounter++;
        return (int) (Math.random() * 49 + 1);
    }

    private static boolean isDupe(int num)
    {
        for (int i = 0; i < top; i++) {
            if (numbers[i] == num) {
                return true;
            }
        }
        return false;
    }

    private static void printResult()
    {
        System.out.printf("Pocet generaci: %s (duplicit: %s)%nCisla: ", genCounter, genCounter - numbers.length);
        for (int num : numbers) {
            System.out.printf("%s ", num);
        }
    }

    public static void main(String[] args)
    {
        do {
            clear();          // resetuje vse
            prepareNumbers(); // vygeneruje cisla
            printResult();    // vypise cisla
            System.out.println("\nOpakovat vypocet? (1/0): ");

        } while (scanner.nextLine().equals("1"));
    }
}
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 36 hostů

Podobná vlákna

Hledání v poli polí — založil jaxx19

Hledání umístění prvku v poli — založil Laura a Naty

Hledání sudého prvku v poli C — založil CrazyWolf

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý