# String lexikographisch in Liste einfügen



## Razorhawk (26. Januar 2005)

Ich programmiere gerade eine Klasse für Stringlisten zum üben.

Ich schreibe gerade eine Methode zum anfügen eines neuen values in die Liste.
In dieser Methode soll der Begriff gleich lexikographisch richtig eineordnet eingefügt werden.
Ich vergleiche ich bei Wörten ob sie vor oder nach einem anderen Wort kommen?
Gibt es einen Befehl?


----------



## teppi (26. Januar 2005)

Schau dir mal die Klasse Collections an.


----------



## Thomas Darimont (26. Januar 2005)

Hallo!


```
/*
 * Created on 26.01.2005@20:17:25
 *
 * TODO Licence info
 */
package de.tutorials;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.SortedSet;
import java.util.TreeSet;

/**
 * @author Administrator
 *
 * TODO Explain me
 */
public class Test {

    public static void main(String[] args) {

        //Ganz einfach mit einem SortedSet 
        //Doppelte Einträge nicht erlaubt!
        SortedSet set = new TreeSet();

        set.add("DDDDD");
        set.add("WWWWWWW");
        set.add("AAAAAA");
        set.add("XXXXX");
        set.add("UUUUU");
        set.add("IIII");
        set.add("BBBB");
        set.add("ZZZZZZZZZ");

        System.out.println(set);

        //Mit einer List ist das nur nachträglich möglich.

        List list = new ArrayList();
        list.add("DDDDD");
        list.add("WWWWWWW");
        list.add("AAAAAA");
        list.add("XXXXX");
        list.add("UUUUU");
        list.add("IIII");
        list.add("BBBB");
        list.add("ZZZZZZZZZ");
        Collections.sort(list);
        System.out.println(list);
    }
}
```

Gruß Tom


----------



## Razorhawk (27. Januar 2005)

Problem ist nicht, dass effizientere Lösungen gibt, sondern, dass ich eine Lösung innerhalb gewisser Bedigungen haben möchte und die Bedingung stellt die folgende Demoklasse dar.

Danach poste ich noch mein Codeschnippsel und ich weiß nicht warums nicht geht, da ich die zusammenhänge von Listen noch nicht ganz kapiert habe im programmiertechnischen Sinne zumindest:

Vorgegeben Klasse zu der die zu schreibende funktionieren muss:


```
class ListDemo{
	public static void main(String args[]){
		
		String[] stringen = new String[6];
		stringen[0]="zzz";
		stringen[1]="3zzz";
		stringen[2]="43zzz";
		stringen[3]="111zzz";
		stringen[4]="hgklg";
		stringen[5]="aaaaa";
		
		args=stringen;
		
		if (args.length == 0){
			System.err.println("Wenigstens ein Argument noetig");
			return;
		}
		
		StringList list = new StringList(args[0]);
		StringList reversedList= null;;
		
		for (int i = 1; i < args.length; i++)
			list = list.insert(args[i]);
		//reversedList = reverse(list);
		
		while (list != null){
			System.out.println(list.getValue() );
			list = list.next();
		}
		
		while (reversedList != null){
			System.out.println(reversedList.getValue());
			//reversedList = reversedList.next();
		}
	}
```


```
package StringListe;


public class StringList {

	private String value;
	private StringList rest;
	
	public StringList (String v){
		
		this.value = v;
		this.rest = null;
		
	}
	
	public String getValue () { return value; }
	
	public StringList next(){
		
		return this;
		
	}
	
	public StringList insert (String val){
		
		if (val.compareTo(this.value) <= 0){
			
			System.out.println("wort kleiner als anderes");
			return new StringList (val);
		}	
		else if (rest == null) {
			
			System.out.println("wort am ende");
			rest = new StringList(val);
			return this;
			
		}
		else {
			rest = rest.insert(val);
			return this;
		}
		

		
	}
	
}
```

Danke für die Hilfe!


----------



## Razorhawk (28. Januar 2005)

Is noch nich viel Zeit vergangen und ich eigentlich will ich nicht drängen, doch ich steh ein bisschen unter Druck das zu verstehen.
Falls was unklar ist an dem Quellcode, dann kann ich auch ne Erklärung abgeben.


----------



## Javanewbie (28. Januar 2005)

müsste so gehen ->geht zumindest bei mir code habe ich ausm inet kopiert und angepasst
 ->würde da ich von der porggsprache ada komme stacks anderst proggen ;-)


  public class StringList {
    private String value;
    private StringList rest=null;

    public StringList(String v, StringList next) {
      value = v;
      rest = next;
    }

    public String getValue() {
      return value;
    }

    public void setValue(String val) {
      value = val;
    }

    public StringList getRest() {
      return rest;
    }



    public StringList addInorderM(String n) {
      if (n.compareTo(this.value) <= 0) {
        return new StringList(n, this);
      }

      else if (rest == null) {
        rest = new StringList(n, null);
        return this;
      }
      else {
        rest = rest.addInorderM;
        return this;
      }
    }

  }


----------



## Razorhawk (29. Januar 2005)

Schön, dass du dir die mühe gemacht hast, echt.
Aber bringt mir nicht viel... so wie es da ist, gehts bei mir auch, aber die Klasse muss funktionieren, dass die Klasse ListDemo die StringList aufruft und auch Fehlerfrei benutzen kann. Dabei darf ja ListDemo eben nicht verändert werden.


----------

