Werte einer LinkedList mit einer Zahl vergleichen?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Ich würde es spontan so machen:

import java.util.LinkedList;

public class Main {

    public static void main(String[] args) {
        //gibt zahlen aus
        System.out.println(split(15) + "");
    }

    private static LinkedList<Integer> split(int zahl)
    {
        //linked list für zahlen die GRÖSSER als eingegebene sind
        LinkedList<Integer> greater = new LinkedList<>();


        //linked list für zahlen die KLEINER als eingegebene sind
        LinkedList<Integer> less = new LinkedList<>();

        //loopt bis z.B 25
        for(int i = 0; i < 25; i++)
        {
           //wenn die eingegebene Zahl größer als i ist -> I kleiner -> i zur less linked list hinzufügen
            if(zahl > i)
            {
                less.add(i);
            }

           //wenn die eingegebene Zahl kleiner als i ist -> I größer-> i zur greaterlinked list hinzufügen
            if(zahl < i)
            {
                greater.add(i);
            }
        }

        //hier habe ich jetzt einfach mal die linkedlist mit den höheren Zahlen
         als der eingegebenen zurückgegeben.
        return greater;
    }
}

RaBo129 
Fragesteller
 06.11.2019, 19:15

Ohhh das hilft mir sehr viel weiter!!! Vielen Dank!!! Nur wie weiss ich wie lange meine LinkedList ist? Ich erhalten jeglich folgende Informationen vor der split Methode:

public class SpecialLinkedIntList {
    
    SpecialIntNode first;
    SpecialIntNode last;
    
    /**
     * Appends 'value' at the end of the list.
     */
    void addLast(int value) {
    	
    	// Aendern Sie diese Methode nicht.
    
        SpecialIntNode newNode = new SpecialIntNode(value);
        if(first == null) {
        	first = newNode;
        } else {
        	last.next = newNode;
        }
        last = newNode;
    }

Nach der split Methode:

 void printList() {
    	
    	// Sie koennen diese Methode beliebig aendern.
    	
    	SpecialIntNode n = first;
    	System.out.print("[");
    	if (n != null) {
    		System.out.print(n.value);
    		n = n.next;
    		while(n != null) {
    			System.out.print(", " + n.value);
    			n = n.next;
    		}
    	}
    	System.out.print("]");
    	System.out.println();
    }
    
    /** Printet die Liste wenn man den 'oldNext' Feldern folgt. */
    void printOldList() {
    	
    	// Sie koennen diese Methode beliebig aendern.
    	
    	SpecialIntNode n = first;
    	System.out.print("[");
    	if (n != null) {
    		System.out.print(n.value);
    		n = n.oldNext;
    		while(n != null) {
    			System.out.print(", " + n.value);
    			n = n.oldNext;
    		}
    	}
    	System.out.print("]");
    	System.out.println();
    }
    
}


0
ZenzCode  06.11.2019, 19:34
@RaBo129

HeyHo!

Wie ich sehe, printest du die Werte immer mit ", " + value aus.

Das heißt du erhälst am ende einen String der ungefähr so aussieht:

[4, 2, 1, 3, 5], richtig?

Ich hab mir einfach mal eine String Variable "test" angelegt, die so aussieht, nicht wundern.

Wenn das der fall ist, dann dürfte das für dich funktionieren:

//du entfernst die [] mit den replace befehlen und splittest den String
//wenn ein ", " auftaucht. Heißt du erhälst nun eine Array, welche die Länge der Liste enthält.
String[] splitted = test.replace("[", "").replace("]", "").split(", ");

//dann einfach die length der splitted list ausgeben
System.out.println(splitted.length);

Sollte ich irgendwas falsch verstanden haben, einfach korrigieren! :D

Mit freundlichen Grüßen

Eric

0
public static void main(String[] args) {
  List<Integer> list = new LinkedList<>(Arrays.asList(1, 3, 8, 12, 17));
  split(list, 5).forEach(System.out::println);
}
    
public static List<Integer> split(List<Integer> list, int zahl) {
  return list.stream().filter(i -> i > zahl).collect(Collectors.toList());
}

Ausgabe:

8
12
17
RaBo129 
Fragesteller
 08.11.2019, 16:51

Vielen Dank für deine Antwort!!! Sie hat mir echt mega weiter geholfen!!!

0