Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

SilentDragon

Alter Hase

  • »SilentDragon« ist der Autor dieses Themas

Beiträge: 530

Wohnort: Köln

Beruf: Student

  • Private Nachricht senden

1

05.12.2009, 16:22

LinkedList in Java...

hey zusammen,

habe ein bisschen weiter geschrieben und wieder ein problem mit java :>

ich wollte von mir erzeugte Knoten in eine LinkedList schreiben, was soweit auch geht. Jedoch wenn ich das erste Element aus der liste nehmen will schreibt der mir das ich ein Object herrausbekomme und nicht meinen Knoten oO

hier erstmal der zugehörige code:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import java.util.*;

public class Tree
{
    private String array;
    private Knoten buchstaben;
    private int counter;
    private Queue items;
    private Queue sort;
    
    public Tree(String array)
    {
      items = new LinkedList();
      this.array = array;
      counter = 0;
      zuKnoten();
    }
    
    private void zuKnoten()
    {
        StringTokenizer st = new StringTokenizer(array, ","); 
        
        while (st.hasMoreTokens()) 
        { 
            if(counter == 0)
            {
                Knoten buchstabe = new Knoten();
                buchstabe.setzeBuchstabe((char)(32));
                buchstabe.setzeZahl(Integer.parseInt(st.nextToken()));
                items.add(buchstabe);
            }
            else
            {
                Knoten buchstabe = new Knoten();
                buchstabe.setzeBuchstabe((char)(counter+64));
                buchstabe.setzeZahl(Integer.parseInt(st.nextToken()));
                items.add(buchstabe);
            }
            counter++;
        }
    }
    
    private void sortQueue()
    {
        Knoten a = new Knoten();
        Object b = items.remove();   
        if(a.gibZahl() > b.gibZahl()) {
            sort.add(b);
            sort.add(a);
        }
        else
        {
            sort.add(a);
            sort.add(b);
        }
    }        
}

Knoten:
public class Knoten
{
    private Knoten rechts;
    private Knoten links;
    private int zahl;
    private char buchstabe;
    
    public Knoten()
    {
       Knoten rechts = null;
       Knoten links = null;
       buchstabe = ' ';
       zahl = 0;
    }
    
    public void setzteRechts(Knoten k)
    {
        rechts = k;
    }
    
    public void setzteLinks(Knoten k)
    {
        links = k;
    }
    
    public void setzeBuchstabe(char a)
    {
        buchstabe = a;
    }
    
    public void setzeZahl(int i)
    {
        zahl = i;
    }
    
    public Knoten gibRechts()
    {
        return rechts;
    }
    
    public Knoten gibLinks()
    {
        return links;
    }
    
    public int gibZahl()
    {
        return zahl;
    }
    
    public char gibBuchstabe()
    {
        return buchstabe;
    }
}


als string wird eine zeichenkette von zahlen übergeben welche mit einem',' getrennt werden. Erste zahl anzahl der leerzeichen, der rest 'A'-'z'.

thx im voraus

SD
...

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

2

05.12.2009, 16:28

du erzeugst ja auch ne LinkedList von Objekten... Deklarier doch mal ne LinkedList<Knoten> statt ner Queue (erzeugen entsprechend mit new LinkedList<Knoten>()). Hast du mal versucht das Objekt nach Knoten zu casten?

3

05.12.2009, 18:26

Zuerst waren die Collections des Java-API alle untypisiert, spricht enthielten Object-Referenzen. Mit der Einführung der Generics erhielt man die Möglichkeit, Elementtypen explizit anzugeben, die Syntax der Benutzung ist ähnlich der von C++. Wie rewborn sagt, kannst du sowas machen:

C-/C++-Quelltext

1
private LinkedList<Knoten> = new LinkedList<Knoten>();

Ich rate dir, wenn möglich immer den Typ anzugeben, damit hast du mehr Sicherheit zur Kompilierzeit und brauchst auch nicht zu casten.

SilentDragon

Alter Hase

  • »SilentDragon« ist der Autor dieses Themas

Beiträge: 530

Wohnort: Köln

Beruf: Student

  • Private Nachricht senden

4

05.12.2009, 23:17

Ahh ja danke euch beiden ;)

habe jedoch jetzt ein weiteres problem:

möchte die Inhalte in der Schleife sortieren. Jedoch bekomme ich immer bei sort.add(i, a) einen Fehler: OutOfMemoryError: Java heap Space -.-*
items ist die ersteliste, sort ist die zweite liste in die alles sortiert rein soll.
Knoten ist eine von mir erstelle klasse (siehe oben)
Hier erstmal der code

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    private void sortItems()
    {
        while(!items.isEmpty())
        {
            Knoten a = (Knoten)(items.remove()); 
            if(sort.size() == 0)
            {
                sort.add(a);
            }
            else
            {
                for(int i = 0; i < sort.size(); i++)
                {
                    Knoten b = (Knoten)(sort.get(i));
                    if(a.gibZahl() < b.gibZahl())
                    {
                        sort.add(i, a);
                    }
                    else
                    {
                    }
                }
                sort.add(a);
            }
        }
    }


thx SD
...

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

5

05.12.2009, 23:25

Zumindest fehlt bei dir ein break nach dem erfolgreichen Einfügen, du addest das Element also ganz schön oft, was zu deinem Speicher Problem führen könnte. Versuchs mal damit

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private void sortItems()
    {
        while(!items.isEmpty())
        {
            Knoten a = (Knoten)items.remove();

                bool inserted = false;
                for(int i = 0; i < sort.size(); i++)
                {
                    Knoten b = (Knoten)(sort.get(i));
                    if(a.gibZahl() < b.gibZahl())
                    {
                        inserted = true;
                        sort.add(i, a);
                        break;
                    }
                }

                if (!inserted)
                    sort.add(a);

        }
    }

MasterK

Frischling

Beiträge: 92

Wohnort: Koblenz

Beruf: Teamleiter Softwareentwicklung

  • Private Nachricht senden

6

07.12.2009, 22:01

Schneller und kürzer dürfte es mit

Collections.sort(List<T>);

gehen.

Werbeanzeige