Mám dve samostatné 2D súbory. Každý z nich obsahuje menšie súbory, ktoré sú dvojicami hodnôt int. Prvé 2D pole je vstupná informácia, druhé 2D pole obsahuje hodnoty, ktoré sa majú porovnávať alebo vyhľadávať proti.
Napríklad vstupné pole I je:
{{0, 1}, {0, 2}, {2, 1}, {1, 0}, {0,1}}
Druhé, referenčné pole sú všetky možné kombinácie hodnôt od prvého:
{{0, 0}, {0,1}, {0,2}, {1, 0}, {1, 1}, {1, 2}, {2, 0}, {2, 1}, {2, 2}}
Chcem zobrať vstup a určiť, čisubarray i sa rovná ktorejkoľvek z referenčných podsúborov. Chcem, aby boli výsledky v jednorozmernom poli rovnakej veľkosti ako referencia s počtom početov, kedy bol každý subarray nájdený vo vstupnom poli. Takže výsledné pole by malo vyzerať takto:
{0, 2, 1, 1, 0, 0, 0, 1, 0}
Toto je môj pokus o kód:
int[] ResultArray = new int[ReferenceArray.Length];
for (int i = 0; i < ReferenceArray.Length; i++)
{
for (int j = 0; j < InputArray.length; j++)
{
if (InputArray[j] == RefereenceArray[i])
ResultArray[i]++;
}
}
Z nejakého dôvodu sa to kompiluje, ale v ResultArray sa nič neposkytuje. Keď som sa pokúsil použiť
Arrays.equal(InputArray[j], ReferenceArray[i])
namiesto toho sa mi pri kompilácii vyskytla chyba. Máte nejakú predstavu, čo sa pokazilo? Mal som podobný blok kódu, ktorý fungoval dobre a nemôžem zistiť, aký problém tu je.
odpovede:
4 pre odpoveď č. 1==
(na Object
typ) vždy testuje referenčnú identitu. Môžeš použiť Arrays.deepEquals(Object[], Object[])
tým, že ich zmeníte
if (InputArray[j] == RefereenceArray[i])
na niečo ako
if (Arrays.deepEquals(InputArray[j], RefereenceArray[i]))