String-Integer-Gemisch überlisten?

Status
Nicht offen für weitere Antworten.

titus

Mitglied
Hallo! 😉

Ich habe da mal eine Frage. Fragt aber bitte nicht nach dem Sinn dieses Programms, denn das ist eine Aufgabe, die ich lösen soll, wo ich aber an einer Stelle nicht weiter komme. Ich habe den Programmcode wegen der Übersichtlichkeit etwas gekürzt - ich hoffe nicht zu sehr. 😉

Code:
import java.lang.*;

public class DoubleList {
    class ListElem {    // 'ListElem' implementiert ein Listenelement
        
        private ListElem m_Next;    // dies ist der Nachfolger
        private ListElem m_Prev;    // dies ist der Vorgänger
        private String   m_Elem;

        /* Der Konstruktor erwartet das zu speichernde Element und den Verweis
         * auf das nächste Listenelement. */
        public ListElem(String obj, ListElem next, ListElem prev) {
            m_Next = next;
            m_Prev = prev;
            m_Elem = obj;
            
            if (m_Next != null)       // Wenn es das nächste Elemnt gibt, dann
                m_Next.setPrev(this); // ... bin ich der Vorgänger davon
            
            if (m_Prev != null)       // Wenn es das vorherige Element gibt,
                m_Prev.setNext(this); // ... dann bin ich der Nachfolger davon
        }
        public void setNext(ListElem next) {
            m_Next = next;
        }

        public void setPrev(ListElem prev) {
            m_Prev = prev;
        }
    }
    
    private ListElem m_Head;    // Eine Liste merkt sich nur das 1. Listenelem.
        
    public DoubleList() {
        m_Head = null;
    }
    
    // Ein Element wird eingefügt
    public void addElement(String obj) {
        m_Head = new ListElem(obj, m_Head, null);
    }

    public static void main(String[] args) {
        DoubleList dl = new DoubleList();       // Liste 'dl' anlegen ...
        for ( int i = -100; i < 100; ++i ) {    // ... 200 Elemente in
            dl.addElement(new Integer(i));      // diese Liste einfügen
        }
        dl.print();
    }
}

Das Problem ist nun: Überall, wo "String" steht, soll auch String hin (Wieso auch immer....). Da stand vorher "Object" und es funktionierte. Mit "String" bekomme ich aber folgende Meldung....

.\DoubleList.java:100: addElement(java.lang.String) in DoubleList cannot be applied to (java.lang.Integer)
dl.addElement(new Integer(i)); // diese Liste einfügen

Der mag den Integer da wohl nicht. Ich meine da auch mal irgendwann was mitbekommen haben, dass man Strings und Integer nicht mischen soll.

In die Liste sollen neben Zahlen auch Strings eingefügt werden. Gibt es eine Möglichkeit dies irgendwie zu lösen, ohne aus "String" ein "Object" zu machen?
 
Deine add-Methode verlangt ja eindeutig nach einem String, also musst du aus dem Integer einen String machen:
Code:
dl.addElement(new Integer(i).toString());
oder auch
Code:
dl.addElement(i+"");
oder auch
Code:
dl.addElement(Integer.toString(i));

Um das zu mischen, müsstest du wirklich auf Object gehen; ist aber keine tolle Lösung, würde ich sagen.
Beim Abrufen kannst du ja den Eintrag, wenn er denn eine Zahl darstellt, per Integer.parseInt(String i) wieder zu einem Integer machen.
 
Au man! Die toString-Methode! Natürlich! Ich bin so blöd, das hatten wir doch. 😉

Vielen Dank! 🙂


Achso, was ich noch fragen wollte: Warum wäre die Object-Lösung nicht so eine gute Lösung? Kann man nicht theoretisch alles vom Object "ableiten"?
 
Theorethisch kannst du alles von Objekt ableiten, aber eine Objekt-Liste kann dann eben auch einfach alles enthalten ... JButtons, JFrames, Images, Strings, Integer, Doubles, Floats, Timer ... deshalb ist das mMn keine besonders tolle Lösung, man weiß nie, was drin ist.
Eine zusätzliche Sache wären Generics; wenn ihr die schon hattet, kann man die hier toll verwenden, zwar nicht direkt um dein Problem zu lösen, aber um die Liste allgemeiner zu halten. Wenn ihr sie noch nicht hattet, kannst du hier was drüber erfahren.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben