[Java] Objekte in der Laufzeit erzeugen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von osiris, 6. Januar 2011 .

  1. 6. Januar 2011
    Objekte in der Laufzeit erzeugen

    Hallo,

    hab eben Google ein wenig gequält, sowie mein HIrn und es ist nur Matsch rausgekommen.

    Folgendes Problem:
    Ich will - nach Aufforderung des Users - ein neues Element erstellen.
    Dieses Element soll den Namen bekommen, den der User wünscht, sowie 2 Werte, die ebenfalls durch den User mitgegeben werden.

    Also die Methode dahinter sieht folgendermaßen aus:
    Code:
    public Interval(String name, double left, double right){
     this.name = name;
     this.left = left;
     this.right = right;
     }
    Der Code zur Erzeugung sieht folgendermaßen aus:

    Code:
    if(choice == 'N' || choice == 'n'){
     System.out.println("Wie soll das neue Intervall heißen: ");
     name = SavitchIn.readLine();
     System.out.println("Linke / Untere Grenze: ");
     left = SavitchIn.readLineDouble();
     System.out.println("Rechte / Obere Grenze: ");
     right = SavitchIn.readLineDouble();
     Interval meinInterval = new Interval(name,left,right);
    So, aus mir unerklärlichen Gründen überspringt er direkt die Eingabe von "name" und wirft mir die ganz normale Exception/Fehlermeldung von SavitchIn vor die Nase (Your input is not correct. Your input must
    contain at least one nonwhitespace character.
    Please, try again. Enter input .

    Würde die Erstellung so gehen? Laut Angabe, was gemacht werden muss, steht nämlich nur public Interval(left,right); nichts von name, das hab ich so hinzugefügt, um das ganze ein wenig ausweiten zu können.
    Sodass ich dann beispielsweise mit name.getLeft(); die linke Seite bekomme???

    Des Weiteren würde ich dann gerne diese Daten einer Arraylist hinzufügen, diese heißt bei mir namen. namen.add(name,left,right) geht aber nicht, wie schreib ich das also am Besten in die Arrayliste??

    Eine andere Möglichkeit, die ich dem User bieten möchte, ist einen Intervall Namen einzugeben und daraufhin die unteren bzw. die oberen Grenzen angezeigt bekommen.

    Also beispielsweise:
    Code:
    System.out.println("Für welches Intervall sollen die Grenzen angezeigt werden?");
    input = SavichIn.readLineWord();
    "input".getLeft();
    Funktioniert allerdings mit "input" nicht, wie müsste ich sowas bewerkstelligen??

    Danke schön =)



    E:/

    Oder ginge das erzeugen auch so:

    Interval "input" = new Interval (l,r);

    Input hald wieder der Name, den der User dafür vorgesehen hat.

    E2:/ 1 Problem gelöst: das adden zur ArrayListe.
    Hab mir einfach einen String erstellt, dem String den Wert name+left+right gegeben & den String dann zur Liste hinzugefügt
     
  2. 6. Januar 2011
    AW: Objekte in der Laufzeit erzeugen

    Hey!

    Könntest du bitte mal (wenn es nicht zu viel ist) die ganze Klasse Input posten? Ich habe da so einen Verdacht.

    Greez Mever
     
  3. 6. Januar 2011
    AW: Objekte in der Laufzeit erzeugen

    die klasse ist doch egal, ich denke er möchte zur laufzeit variablen mit variablen namen erzeugen.

    in javascript geht das mit dem kontext-objekt "this"
    Code:
    var name = "test"; 
    this[name] = "foo bar baz"; 
    alert(test); // foo bar baz
    in php geht das mit $$ oder ${}
    PHP:
    $name  "test" ;
    $
    $name  "foo bar baz"
    // oder:  ${$name} = "foo bar baz";
    print  $test // foo bar baz
    in java wird einem die typisierung einen strich durch die rechnung machen.
    am ehesten kommt man mit einer HashMap an das gewünschte ergebnis.
     
  4. 6. Januar 2011
    AW: Objekte in der Laufzeit erzeugen

    Also
    Code:
    public Interval(String name, double left, double right){
     this.name = name;
     this.left = left;
     this.right = right;
     }
    
    war an sich doch schonmal ein guter Ansatz.

    erstell die Klasse Interval und dann erstell einfach ne ArrayList mit Interval Objekten.

    Code:
    class Interval {
    private String name;
    private double left;
    private double right;
    
    public Interval(String name, double left, double right){
     this.name = name;
     this.left = left;
     this.right = right;
     }
    //hier getters und setter noch hinzufügen
    }
    
    und dann einfach
    Code:
    Arraylist<Interval> namen = new ArrayList<Interval>();
    namen.add(new Interval("hallo",12,100));
    namen.add(new Interval("bla",0.123,-0.234));
    //usw.
    
    //und falls du dann nach einem bestimmten Interval suchst,
    //dann musst du eben die Liste durchlaufen und nach dem teil
    // gucken mit dem namen den du suchst
    
    Interval gefunden;
    String suche = "bla";
    for (Interval i:namen) {
     if (i.getName().equals(suche)) {
     gefunden = i;
     }
    }
    
    sorry wegen kein Einrücken, kA wie man das hier im Forum ordentlich macht ohne milliarden leertasten zu nutzen
     
  5. 6. Januar 2011
    AW: Objekte in der Laufzeit erzeugen

    Hallo,
    wenn ich das alles richtig verstanden habe:

    Also deinen Constructor mit "Interval(double, double)" kannst du auch verwenden, wenn du beispielsweise eine Map nimmst.
    Somit vermeidest du schon mal das iterieren durch irgendeine List, wenn du wieder irgend ein Interval haben möchtest.

    Snippet:

    Code:
    Map<String, Interval> map = new HashMap<String, Interval>();
    map.put("inputA", new Interval(1.0, 2.0));
    map.put("inputB", new Interval(1.0, 2.0));
     
     
    Interval objA = map.get("inputA");
    objA.getLeft();
    
    Gruß
     
  6. 8. Januar 2011
    AW: Objekte in der Laufzeit erzeugen

    Hmn danke schonmal für die Ratschläge, ganz schlau bin ich daraus noch nicht geworden.
    Muss mich da morgen wohl mal an Google setzen, um den Durchblick zu bekommen.

    Um meine Lage genauer zu definieren:

    Das Beispielprogramm, welches diese Klasse(Interval) verwendet, soll folgendes machen:

    (PC) Wie soll das neue Interval heißen?
    (USER) Interval1ABC
    (PC) Untere Grenze?
    (USER) 3
    (PC) Obere Grenze?
    (USER) 10

    danach soll das Programm quasi folgendes machen

    Interval Interval1ABC = new Interval(3,10)
     
  7. 8. Januar 2011
    AW: Objekte in der Laufzeit erzeugen

    Ich glaub nich, dass du es schaffen wirst den Variablennamen einlesen zu lassen.

    Aber die Parameter sind ja easy going, erst Werte einlesen und dann durch den Konstruktor damit.

    Wieso lässt du nicht statische Objektnamen und willst diese eingeben? Zur Laufzeit wird es dir ja sowieso nix bringen...
     
  8. 9. Januar 2011
    AW: Objekte in der Laufzeit erzeugen

    Würd das ganze hald etwas komplexer machen. Deshalb die Idee.

    Nun gut, ich hab die Idee verworfen, fordere den User einfach auf 2 Intervalle einzugeben, welche er vergleichen will. Ansonsten muss er eben neue erstellen.

    Hab jetzt mein Demo Programm geschrieben, die Instanzen werden folgendermaßen erstellt:
    Interval meinInterval1 = new Interval(left,right);
    Interval meinInterval2 = new Interval(left,right);

    Das Problem:
    Er sagt "Variable meinInterval1 is not used. Demnach können alle anderen Operationen auch net durchgeführt werden.

    Eingelesen wird folgendermaßen
    "Untere Grenze:"
    left = SavitchIn.readLineDouble();
    "Obere Grenze:"
    right = SavitchIn.readLineDouble();

    Das ganze ist in einer Do - While Schleife drin mit Cases.
    Also
    User bekommt ein Interface ausgedruckt, je nach Tasteneingabe wird eine Operation ausgeführt.
    Wie das mit neuen Intervallen aussieht könnt ihr oben sehen.

    Komm da gerade nicht weiter :O

    E:/ Problem gelöst.. Raus aus dem Choice mit der Aufforderung & gut isses!
     
  9. 9. Januar 2011
    AW: Objekte in der Laufzeit erzeugen

    Ich habe nicht wirklich verstanden, was du eigentlich willst, aber wenn du einfach eine Instanz von Interval mit Hilfe von Benutzereingaben erstellen willst und sie dann unter einem bestimmten Namen speichern willst, mach doch einfach folgendes:
    Code:
    Map<String, Interval> map = new HashMap<String, Interval>();
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
    System.out.print("Name: ");
    String name = br.readLine();
    System.out.print("Untere Grenze: ");
    double left = Double.parseDouble(br.readLine());
    System.out.print("Obere Grenze: ");
    double right = Double.parseDouble(br.readLine());
    
    map.put(name, new Interval(left, right));
    
    // Um das erstellte Objekt wieder abzurufen:
    map.get(name);
    
     
  10. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.