Sortering vektor
Hej!
Jag har fastnat på denna simpla uppgift.
Undersök om talen i vektorn v är sorterade i stigande ordning.
Min kod är:
public static boolean isSorted(int[] v) {
if (v.length == 1) {
return true;
}
for (int i = 0; i < v.length; i++) {
if (v[i] <= v[i+1]) {
return true;
}
}
return false;
}
Jag antar att min loop slutar att bläddra i vektorn efter första talet men vet inte hur jag ska åtgärda detta.
Just nu hoppar du tillbaka redan i första genomlöpningen om de första två talen är sorterade.
Vänd på villkoret, om talet > talet+1 så är listan inte sorterad, returnera false,
Annars, returnerar vi true efter loopen (då har vi ju lyckats gå igenom alla element utan att returnera false).
Du går genom listan och avbryter så fort du hittar två tal som är sorterade i rätt ordning. Är det verkligen rätt sätt att kontrollera att hela listan är sorterad?
Fundera på hur du hade löst problemet utan dator. Läs talen i listan en och en. När vet du att listan inte är sorterad? När vet du att listan är sorterad?
Jroth skrev:Just nu hoppar du tillbaka redan i första genomlöpningen om de första två talen är sorterade.
Vänd på villkoret, om talet > talet+1 så är listan inte sorterad, returnera false,
Annars, returnerar vi true efter loopen (då har vi ju lyckats gå igenom alla element utan att returnera false).
Testade att ändra:
public static boolean isSorted(int[] v) {
if (v.length == 1) {
return true;
}
for (int i = 0; i < v.length; i++) {
if (v[i] >= v[i+1]) {
return false;
}
}
return true;
}
men det resulterade i ett nytt felmeddelande.
Mega7853 skrev:Du går genom listan och avbryter så fort du hittar två tal som är sorterade i rätt ordning. Är det verkligen rätt sätt att kontrollera att hela listan är sorterad?
Fundera på hur du hade löst problemet utan dator. Läs talen i listan en och en. När vet du att listan inte är sorterad? När vet du att listan är sorterad?
Precis, just där jag inte kommer längre. Jag tänker att jag vet att listan är sorterad när for-loopen gått igenom alla tal i, och i begränsas av längden på vektorn v. Om den klarar att gå igenom alla tal (dvs sorterad) returneras true och om inte returneras false. Jag antar att return kommer för tidigt i koden och därav avbryts loopen när den bara gått igenom första talet, men vet inte hur jag åtgärdar detta som sagt.
proghelp skrev:Jroth skrev:Just nu hoppar du tillbaka redan i första genomlöpningen om de första två talen är sorterade.
Vänd på villkoret, om talet > talet+1 så är listan inte sorterad, returnera false,
Annars, returnerar vi true efter loopen (då har vi ju lyckats gå igenom alla element utan att returnera false).
Testade att ändra:
public static boolean isSorted(int[] v) {
if (v.length == 1) {
return true;
}
for (int i = 0; i < v.length; i++) {
if (v[i] >= v[i+1]) {
return false;
}
}return true;
}men det resulterade i ett nytt felmeddelande.
Om du stoppar in spårutskrifter så ser du hur långt programmet kommer innan det blir fel.
Vad händer när i är lika med v.length-1? Vilka tal jämförs?
En god vana är bara ha ett return i en funktion. Blir enklare att s vad funktionen returnera samt enklare att följa funktionens exekvering, till exempel vad händer med variabeln i hela vägen från start till funktionens return, till exempel vad är i när funktionen returnerar.
Du kan inte iterera till sista elementet och jämföra med det elementet utanför din array
När i är sizeof(a) - 1 (sista elementet) så försöker du jämföra med i+1.
Iterera i < sizeof(a) - 1 eller börja på 1 och jämför bakåt i din array
Tigster skrev:Du kan inte iterera till sista elementet och jämföra med det elementet utanför din array
När i är sizeof(a) - 1 (sista elementet) så försöker du jämföra med i+1.
Iterera i < sizeof(a) - 1 eller börja på 1 och jämför bakåt i din array
Du kunde ge proghelp en chans att reagera själv på mitt påpekande.
Visa spoiler
Skriv ditt dolda innehåll här
Laguna skrev:
Tigster skrev:Du kan inte iterera till sista elementet och jämföra med det elementet utanför din array
När i är sizeof(a) - 1 (sista elementet) så försöker du jämföra med i+1.
Iterera i < sizeof(a) - 1 eller börja på 1 och jämför bakåt i din array
Du kunde ge proghelp en chans att reagera själv på mitt påpekande.
Jag kom på det men hittade ingen knapp för att ta bort mitt meddelande. Såhär i efterhand så borde jag gjorde en edit.. :/
Tigster skrev:Visa spoiler
Skriv ditt dolda innehåll här
Laguna skrev:
Tigster skrev:Du kan inte iterera till sista elementet och jämföra med det elementet utanför din array
När i är sizeof(a) - 1 (sista elementet) så försöker du jämföra med i+1.
Iterera i < sizeof(a) - 1 eller börja på 1 och jämför bakåt i din array
Du kunde ge proghelp en chans att reagera själv på mitt påpekande.
Jag kom på det men hittade ingen knapp för att ta bort mitt meddelande. Såhär i efterhand så borde jag gjorde en edit.. :/
Det är ingen fara, jag fick ta mig en funderare på denna ändå. Tack för alla inlägg!