Porovnávání prvků dvourozměrného pole – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Porovnávání prvků dvourozměrného pole – Java – Fórum – Programujte.comPorovnávání prvků dvourozměrného pole – Java – Fórum – Programujte.com

 

Ondra
~ Anonymní uživatel
244 příspěvků
27. 1. 2017   #1
-
0
-

Ahoj, pomohl by mi prosím někdo s porovnáváním dvou 2D polí? Mám program, který porovná prvky dvou 2D polí, jenže testprogram mi vyhodí chybu, protože vykonávání programu trvá moc dlouho, potřeboval bych ho nějak zjednodušit. Pro zjednodušení jsem zkoušel jsem metodu Arrays.deepEquels(), jenže ta mi vyhodí false, pokud rozměry matice nejsou stejné. pokud mám dvě pole o rozměrech třeba 2x2, tak funguje, ale třeba 2x3 a 3x2 už ne a to by mělo.

 Zatím mám tento kód:

	    int x1 = sc.nextInt();
            int y1 = sc.nextInt();
            int[][] prvni = new int[x1][y1];
            for (int i = 0; i < prvni.length; i++) {
                for (int j = 0; j < prvni[0].length; j++) {
                    prvni[i][j] = sc.nextInt();
                }
            }
            int x2 = sc.nextInt();
            int y2 = sc.nextInt();
            int[][] druha = new int[x2][y2];
            for (int i = 0; i < druha.length; i++) {
                for (int j = 0; j < druha[0].length; j++) {
                    druha[i][j] = sc.nextInt();
                }
            }
            for (int i = 0; i < prvni.length; i++) {
                for (int j = 0; j < prvni[0].length; j++) {
                    x = prvni[i][j];
                    for (int k = 0; k < druha.length; k++) {
                        for (int l = 0; l < druha[0].length; l++) {
                            if (druha[k][l] != x) {
                                y++;
                            }
                        }
                    }
                }
            }
            if (y %2 == 0) {
                System.out.println("1");
            } else {
                System.out.println("0");
            }

nějaké nápady?

Nahlásit jako SPAM
IP: 2a00:1028:96d2:3baa:2c6e:...–
gna
~ Anonymní uživatel
1891 příspěvků
27. 1. 2017   #2
-
0
-

Z toho kódu nechápu, jak se to snažíš porovnávat. Kdyžtak přesněji popiš, co to má dělat.

Pokud chceš porovnat hodnoty na indexech, které jsou v obou maticích, tak třeba takto:

boolean neshoda = false;

for (int i = 0; i < x1 && i < x2 && !neshoda; i++) {
	for (int j = 0; j < y1 && j < y2 && !neshoda; j++) {
		if (prvni[i][j] != druha[i][j]) {
			neshoda = true;
		}
	}
}

A šlo by to udělat už při načítání druhé matice.

Nahlásit jako SPAM
IP: 213.211.51.–
Ondra
~ Anonymní uživatel
244 příspěvků
28. 1. 2017   #3
-
0
-

Chci porovnávat čísla na indexech, ale na těch samých indexech nemusejí bý ta samá čísla, můžu mít třeba 1 2 3 4 5 a v druhé 2 4 5 1 3 ( taky problém, chtěl jsem pole nejdřív setřídit, zkoušel jsem Arrays.sort(), ale vyskakovalo mi exception) a výsledek bude pořád true... a nemůžu používat jen jeden for, protože velikosti nemusejí být vždy stejné, pokud zadám  první velikost třeba 1x5 a druhou 5x1, tak mi program vyhodí ArrayIndexOutOfBoundsException. Tak jsem to udělal tak, že jsi přes jeden for zvolím jedno číslo a v druhém foru k němu hledám to samé číslo v druhé matici, pokud ho najdu, tak y++, pokud jsou pak oba prvky v matici, bude y vždy sudé, pokud liché, tak je to špatně (ozkoušeno, funguje to tak). Já k tomuhle postupu hledám jen jednodušší alternativu.

Nahlásit jako SPAM
IP: 2a00:1028:96d2:3baa:200c:...–
gna
~ Anonymní uživatel
1891 příspěvků
28. 1. 2017   #4
-
0
-

Na rozměrech nezáleží. Prakticky je jen jeden -- šířka * výška. To počítání nefunguje a hlavně je zbytečné, najdeš / nenajadeš -- boolean. První možnost zrychlení je skončit hned, jak najdeš problém, nemusíš testovat všechno.

Takže máš zjistit, jestli se obě matice skládájí ze stejných hodnot? To bych je obě načetl do Setu (kolekce bez duplicit) a ty pak porovnal.

Nahlásit jako SPAM
IP: 213.211.51.–
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, 37 hostů

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ý