10 svar
154 visningar
proghelp är nöjd med hjälpen
proghelp 19
Postad: 10 aug 2020 Redigerad: 10 aug 2020

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 1227
Postad: 10 aug 2020 Redigerad: 10 aug 2020

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 108
Postad: 10 aug 2020

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
Postad: 10 aug 2020
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
Postad: 10 aug 2020
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 13518
Postad: 10 aug 2020
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 510
Postad: 10 aug 2020

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 252
Postad: 10 aug 2020

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 13518
Postad: 10 aug 2020
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 252
Postad: 10 aug 2020
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
Postad: 11 aug 2020
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