Den skal return true, fordi de tal i list2 findes i liste1 i nøjagtig samme talrække.
Min tanke er at jeg skal tjekke begge lister igennem et for loop, også lave en if sætning i det nested for loop der siger hvis list1 == list2.
Men den skal jo tjekke om den samme tal række er lige efter hinden, så hvis den finder 2 eller flere tal som er ens lige efter hinanden er det true. Kan jeg gøre det sådan??
Jeg kan ikke lige gennemskue hvordan det skal gøres, dette er den kode jeg har indtil videre. Denne kode, return true. Men hvis jeg ændre array list2 til 2, 1, 2 så er den stadigvæk true og det passer jo ikke rigtig.
public static boolean contains(int[] list1, int[] list2) {
Den indre for loekke skal ioevrigt nok ikke starte i 0 (raekkefoelge!!).
Synes godt om
Slettet bruger
10. april 2014 - 22:49#4
For at løse opgaven har jeg gjort følgende:
- boolean var sat til false - for-løkke, som kører hele list1 igennem. - ArrayList<Integer> til at lægge tal i - Ny for-løkke som kører liste 2 igennem - Først i den for-løkke sikrer jeg mig, i+j er mindre end list1.length - Derefter kigger jeg på, om værdien i list1[i+j] er den samme som i list2[j] - Hvis den er det lægger jeg værdien i arraylisten - Hvis ikke, så tømmer jeg listen og breaker ud af løkken - Efter den if sætning, tjekker jeg, om antallet af elementer i arraylisten er det samme som størrelsen af list2. Hvis ja, sættes boolean værdien til true og jeg breaker ud af løkken. - Efter den indre løkke tjekker jeg, om boolean værdien er true, hvis den er, så breaker jeg ud af den ydre løkke. Der er ingen grund til at lede videre.
Og det er det. Håber ikke at det har gjort opgaven for nem. Den kan løse på mange andre måder, så dette er bare en mulig løsning.
ssnielsen: Hvorfor gør du dette her: Ser ud som en rigtig god løsning som jeg vil kigge nærmere på :-). Men jeg studser lige over denne her hvorfor gør du det? Først i den for-løkke sikrer jeg mig, i+j er mindre end list1.length??
Så hvis jeg sætter den indre for lopp til false, hvis der ingen match er. Men jeg kan ikke lige gennemskue hvad næste skridt er??
Synes godt om
Slettet bruger
11. april 2014 - 10:50#7
Jeg tjekker at i+j er mindre end længden på det yderste array, så jeg ikke kigger udenfor arrayets længde og dermed får en array out of bounds exception.
Hvis der ingen match er, så sættes den til false og der brydes ud af den indre løkke og der startes forfra fra næste tal i rækken i den ydre løkke.
Men det vil sige at du at du starter på samme måde som mig men inde i det nested for loop.
Siger du at hvis i+j er større end array 1, skal den gå ind i if sætningen og inde i den tjekker du om list[i+j] er == med det i list2 og hvis det er korrekt ligger du tallet i et nyt array.
Men hvad gør du lige i denne her:
if (inList.size() == list2.length) { answer = true; break; }
Den løsning havde jeg simpelthen ikke gennemskuet, jeg havde virkelig ikke gennemskuet at man skulle sige i+j og har ikke helt forstået hvorfor man gør det....
Synes godt om
Slettet bruger
13. april 2014 - 19:16#11
Der tjekker jeg bare, at de tal der er fundet er samme mængde, som dem jeg skulle lede efter. Netop fordi den kan bryde ud af første løkke, hvis der er kommet for langt hen i arrayet, så kan den have fundet to tal ud af tre eller flere og dermed være true. Så det er bare en ekstra sikkerhed.
Men der er nok nogle som lige skal have checket deres Java bog for mindre kendte features inden man tror paa koden.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.