5 svar
56 visningar
Ygolopot 123
Postad: 5 apr 11:51 Redigerad: 5 apr 11:54

Dela upp lista i dellistor

Hej, jag har en lista som jag vill dela upp i flera dellistor. Nedan följer exempel på hur storleken på dellistorna ska se ut givet ett heltal vi stoppar in i metoden:

1. Input, list = {1, 2, 3, 4, 5} -> partition(list, 3) ska ge sublistor av storlek 1, 2, 2 (i den ordningen)

(Här ger min kod sublistor av storlek 1, 1, 3)

2. Input, list = {1, 2, 3, 4, 5} -> partition(list, 2) ska ge sublistor av storlek 2, 3 (i den ordningen)

3. Input, list = {1, 2, 3, 4, 5, 6, 7} -> partition(list, 3) ska ge sublistor av storlek 2, 2, 3 (i den ordnignen)

Min kod löser fall 2 och 3 men inte 1 så uppenbarligen har jag inte förstått mönstret. Någon som har förslag på hur jag ska göra?

(Ska tillägga att jag är helt ny på programmering så om jag bryter mot best practice eller andra konventioner så får ni gärna upplysa mig om det)

Tack på förhand!

Mvh

    List<List<Integer>> partition(List<Integer> ints, int n) {
        List<List<Integer>> result = new ArrayList<>();
        List<Integer> current = new ArrayList<>();
        try {
            int start = 0; int stop = 0; int part = ints.size() / n;
            for (int i = 0; i < n; i++) {
                if (i == n - 1) {
                    start = i * part;
                    stop = ints.size();
                } else {
                    start = i * part;
                    stop = (i + 1) * part;
                }
                for (int j = start; j < stop; j++) {
                    current.add(ints.get(j));
                }
                result.add(new ArrayList(current));
		current.clear();
            }
        } catch (Exception e){
            out.println("Invalid input");
        }
        return result;
    }
Laguna 14271
Postad: 5 apr 13:14

Ska man alltså komma på mönstret själv också? Jag tycker det ser ut som att man gör så många listor som talet man har gett, så lika stora som möjligt, och med de kortare listorna först.

Jag kan inte kolla koden just nu. 

Ygolopot 123
Postad: 5 apr 13:22 Redigerad: 5 apr 13:26

Ja det antar jag för ingen har explicit sagt vilket mönster det följer. Men jag tolkar det precis som du tolkar det: sublistorna så lika i storlek som möjligt med dom kortare först. Lyckas bara inte komma på hur jag ska implementera detta i koden, så det är det jag behöver hjälp med :)

Laguna 14271
Postad: 5 apr 14:21

Om du gör uppgift 1 för hand, hur gör du då?

Ygolopot 123
Postad: 5 apr 19:46

Vet inte om jag är säker på hur du menar men just i den sekvensen ser det ut som man startar med t.ex 5%2 och sen tar 

ints.size() - (5%2) för att sen generera de två sublistorna av storlek 2.

Men det är inte kompatibelt med att 7an styckas upp i 2, 2, 3. Det här är säkert väldigt lätt men lyckas inte komma på hur den generella uppdelningen ser ut för att generera listor på detta sätt med den ordningen och de storlekarna

Laguna 14271
Postad: 5 apr 20:14

Det är ofta så att det är lättare att tänka ut hur ett program ska lösa uppgiften om man har löst den helt utan dator för några olika fall.

Vilka längder kan komma ifråga för dellistorna?

Svara Avbryt
Close