Koitan tehdä metodia joka poistaisi duplikaatit arvot, eli esim. jos syötän 1 2 3 4 1 2 5 niin ulos tulee 1 2 3 4 5. Mikä tässä on pielessä, miksi newList ei saa noita listin arvoja?
public static int[] removeDuplicates(int[] list) { int[] newList = new int[10]; int newLength = 0; for(int i=0;i<list.length;i++) { for(int j=0;j<newLength;j++) { if(list[i]!=newList[j]) { newList[newLength] = list[i]; newLength++; } } } return newList; }
Vika löytyy melko helposti, mikäli seuraat ohjelman toimintaa mielessäsi. Nythän sisempi silmukkasi käy kaikki newListin alkiot läpi, ja lisää listin alkion newListiin joka kerta, kun läpikäytävien alkioiden arvot ovat eri.
Voit ottaa tästä pseudokoodina toimivasta Python-koodista mallia:
for i_item in list: exists_already = False for j_item in newList: if i_item == j_item: exists_already = True break if not exists_already: newList.append(i_item)
Mua hämää suunnattomasti että parametrin nimi on lista, vaikka sille kuitenkin annetaan taulukko.
Toisekseen mua hämää paljon tuo, että jos tuloksen pituus onkin yli 10 yksilöä, niin pusketaan poikkeusta. Mielestäni taikanumeroita ei pitäisi käyttää ollenkaan ja jos on ihan pakko (tässä tapauksessa ei ainakaan ole) niin sitten hyvät selitykset kommenttiin.
Eikö tuon voisi tehdä näin:
public static int[] removeDuplicates(int[] items) { return (new HashSet(items)).toArray(); }
Tämä on harjotus yhdestä Java-kirjasta ja siinä parametrin nimi on list joten en voi asialle mitään. Harjotuksessa vain java.util.Scanner luokka on sallittu. Tuota Python-koodia en oikein ymmärrä.
Koodisi ei käy läpi ollenkaan tuota sisempää for-luuppia, koska newLength on alustettu nollaksi.
Tarkista removeDuplicates funktiossa for - loopissa, onko arvo taulussa jos ei ole niin lisää se. Niin ja ehkä olisi dynaamisempi vaihtoehto käyttää listoja, ainakin uuden taulukon kohdalla vähintäänkin siihen asti että se palautetaan.
public static boolean in_array(int[] taulukko, int estsittavaArvo) { for(int i = 0; i < taulukko.length; i++) { if(taulukko[i] == estsittavaArvo) return true; } return false; }
qeijo kirjoitti:
ehkä olisi dynaamisempi vaihtoehto käyttää listoja
Niin no sitten varmaan samantien HashSet, mutta:
feder kirjoitti:
Harjotuksessa vain java.util.Scanner luokka on sallittu.
Aihe on jo aika vanha, joten et voi enää vastata siihen.