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

Porovnávání polí – Java – Fórum – Programujte.comPorovnávání polí – Java – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
farth0
Duch
2. 5. 2013   #1
-
0
-

Ahoj

potřeboval bych poradit, zasekl jsem se a netuším jak dál.
Zadání bylo

mám tři pole,prvky vygenerovaný háhodně z intervalu, počet prvků zadávám ručně
-program vypise na jeden radek vsechny prvky ktere se vyskytuji soucasne ve vsech 3 poli
-program vypise na kolik procent se vsechna 3 pole schoduji

      for (int i = 0; i < pole1.length; i++) {
            for (int j = 0; j < pole2.length; j++) {
                if (pole1[i] == pole2[j]) {
                    for (int k = 0; k < pole3.length; k++) {
                        if (pole1[i] == pole3[k]) {
                            System.out.print(pole1[i] + " ");
                            pocet++;
                        }
                    }
                }
            }
        }
       System.out.println("\nPole se shodujuji na " + ((pocet) / (pole1.length)) * 100 + "%\n");
    }

někdo nápad jak zamezit aby to nevypisovalo prvky vícekrát a dobře to počítalo procenta??

Nahlásit jako SPAM
IP: 85.71.32.–
Reklama
Reklama
ingiraxo+15
Grafoman
2. 5. 2013   #2
-
0
-

třeba takto? 

package app;

import java.util.HashSet;
import java.util.Set;

public class App {

    private static class Result {

        private Object[] array;
        private float percent;

        public Result(Object[] array, float percent) {
            this.array = array;
            this.percent = percent;
        }

        public Object[] getArray() {
            return array;
        }

        public float getPercent() {
            return percent;
        }

        @Override
        public String toString() {
            StringBuilder sb = new StringBuilder();

            for (Object obj : array) {
                sb.append(obj).append(", ");
            }
            return (sb.length() > 0) ? sb.toString().substring(0, sb.length() - 2) : "";
        }
    }

    public static void main(String[] args) {

        int[] a1 = new int[]{2, 4, 7, 2, 1};
        int[] a2 = new int[]{2, 3, 7, 0, 9, 11};
        int[] a3 = new int[]{2, 8, 6, 7, 3, 12, 15};
        int[] a4 = new int[]{2, 7, 6}; // bonus :D

        Result result = getSharedNumbers(a1, a2, a3, a4);
        System.out.println("Pole: " + result); // 2, 7
        System.out.println("Procent: " + result.percent + "%"); // 67%
    }

    private static Result getSharedNumbers(int[]... arrays) {
        Set<Integer>[] data = new HashSet[arrays.length];
        int min = arrays[0].length;

        for (int[] array : arrays) {
            if (min > array.length) {
                min = array.length;
            }
        }

        for (int i = 0; i < arrays.length; i++) {
            data[i] = new HashSet<>();

            for (int j = 0; j < arrays[i].length; j++) {
                data[i].add(arrays[i][j]);
            }
            if (i > 0) {
                data[0].retainAll(data[i]);
            }
        }
        return new Result(data[0].toArray(), Math.round(100f * data[0].toArray().length / min));
    }
}
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
farth0
Duch
2. 5. 2013   #3
-
0
-

no abych pravdu řek, tak teprve s tím začínám a polovině věcí co tady je tak nerozumím, to mi moc nepomuze  :-(

Nahlásit jako SPAM
IP: 194.228.13.–
ingiraxo+15
Grafoman
3. 5. 2013   #4
-
0
-

no tak základní pointa je v tom, že kolekce Set nemůže uchovávat duplicity, takže si všechny pole převedu do Setu a potom jen filtruju ty, který mají stejný prvky, takže nemám duplicity a funguje to i pro X polí a co se týče toho procenta, tak to máš jednoduchej vzorec... (100f * počet_stejnych_prvků / minimalni_velikost_pole)

Nahlásit jako SPAM
IP: 93.90.162.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Flowy0
Věrný člen
3. 5. 2013   #5
-
0
-

Ja by som to najprv zoradil a potom porovnával spôsobom ako merge sort

Nahlásit jako SPAM
IP: 85.237.227.–
https://github.com/Flowy
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, 24 hostů

Podobná vlákna

Porovnávání polí — založil Row

Porovnávání — založil Malag

Porovnavani retezcu — založil pazdy

Porovnavani double — založil BigBear

Moderátoři diskuze

 

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