10 svar
570 visningar
proghelp är nöjd med hjälpen
proghelp 19 – Fd. Medlem
Postad: 10 aug 2020 14:54 Redigerad: 10 aug 2020 15:00

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.

Jroth 1191 – Fd. Medlem
Postad: 10 aug 2020 15:27 Redigerad: 10 aug 2020 15:28

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).

Mega7853 211
Postad: 10 aug 2020 15:28

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?

proghelp 19 – Fd. Medlem
Postad: 10 aug 2020 16:02
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.

proghelp 19 – Fd. Medlem
Postad: 10 aug 2020 16:05
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. 

Laguna Online 28587
Postad: 10 aug 2020 16:11
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?

Aerius 504 – Fd. Medlem
Postad: 10 aug 2020 17:40

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.

Tigster 271
Postad: 10 aug 2020 17:55

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

Laguna Online 28587
Postad: 10 aug 2020 20:04
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.

Tigster 271
Postad: 11 aug 2020 00:12
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.. :/

proghelp 19 – Fd. Medlem
Postad: 11 aug 2020 15:09
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!

Svara Avbryt
Close