tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von j2se
ERLEDIGT
NEIN
ANTWORTEN
8
ZUGRIFFE
548
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    mysticado mysticado ist offline Mitglied
    Registriert seit
    Oct 2011
    Beiträge
    10
    Hallo Leute,ich habe eine Anfänger-Frage zu Java. In einer Aufgabe soll ich eine "Datenbank" füllen, sprich ich habe eine Klasse VMDatabase und über die soll ich auf einer anderen Stelle ausgelesene Werte intern (in der Memory) speichern. Am besten ihr schaut euch zuerst die Klassen an:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    public class VMDatabase {
    public static List<NetworkEntity> networkEntities = new ArrayList<NetworkEntity>();
    }
     
    public class NetworkEntity {
    private String ip;
    private List<VirtualMachine> virtualMachines;
     
    }
     
    public class VirtualMachine {
    private String ip;
    private long stressDuration;
    private int stressCpuLast;
    private int stressRamLast;
    private boolean webTraffic;
    private int activeUsers;
    private String templatePath;
     
    }
    Ich habe also NetworkEntitys (Rechner) auf denen jeweils mehrere VirtualMachines (virtuelle Maschinen) und das soll so alles in die Database (Datenbank) eingetragen werden. Ich habe auch schon alle Werte für die jeweiligen Strings und ints, nur habe ich keine Ahnung wie ich das denn jetzt angehen soll? Ich habe eine 4. Klasse, welche eine main-Methode besitzt...doch wie kann ich von dort nun die Werte abspeichern?
    Irgendwie so?
    Code java:
    1
    
    VMDatabase.networkEntities.add(new NetworkEntity("192.168.0.1",new List<VirtualMachine>()))

    Please help
    Geändert von mysticado (22.10.11 um 11:31 Uhr)
     

  2. #2
    genodeftest genodeftest ist offline Mitglied Brillant
    Registriert seit
    Jun 2009
    Beiträge
    870
    Hi
    Pack deinen Code bitte in Code-/Java-Tags (siehe meine Signatur).

    Zu deinem Problem: Ich kann dir leider nicht direkt helfen, aber schau dir mal Kapitel 21+22 der JavaInsel, http://openbook.galileocomputing.de/javainsel/ an.
     
    Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.
    ___________
    Ubuntu Bug #1: Microsoft has a majority market share
    Casecon: Projekt leiser Käse

  3. #3
    mysticado mysticado ist offline Mitglied
    Registriert seit
    Oct 2011
    Beiträge
    10
    Ähm, die Kapitel nützen mir nix?! Wie gesagt, ich habe Werte schon eingelesen (sagen wir mal aus einer .txt-Datei), nun will ich sie einfach in dieses Format bringen, um sie in meiner GUI global leichter aufrufen zu können. Mit Internet und RMI hat meine Frage nichts zu tun...
    Trotzdem danke für den Versuch!
     

  4. #4
    SE Tutorials.de Gastzugang
    Zitat Zitat von mysticado Beitrag anzeigen
    Code java:
    1
    
    VMDatabase.networkEntities.add(new NetworkEntity("192.168.0.1",new List<VirtualMachine>()))
    DAS wird so nicht funktionieren da ein entsprechender Konstruktor fehlt der diese Parameter verarbeitet.
    Man merkt das du relativ neu in Java bist ... ich würde dir daher empfehlen über das Wochenende mal die JavaInsel komplett durchzuarbeiten *soweit es deine Zeit zulässt*.

    Es bringt dir nichts wenn wir dir jetzt für dieses konkrete Beispiel helfen wenn du aber nicht verstehst was dabei dann genau passiert und stellst beim nächsten Problem änliche Fragen.
    Wenn du mit der Insel durch bist sollte es dir möglich sein dieses Problem selbst zu lösen.

    Denn in Java gilt dasselbe wie in allen anderen Sprachen : learning by doing ...
     

  5. #5
    mysticado mysticado ist offline Mitglied
    Registriert seit
    Oct 2011
    Beiträge
    10
    Sagen wir's mal so, so neu bin ich in Java nicht, nur habe ich nie wirklich mit solch verschachtelten Klassen gearbeitet und das bringt mich so durcheinander
    Und ja, die Java insel habe ich mir (zugegeben: nicht komplett) angeschaut, immer wenn ich bei irgend etwas fest saß. Bei meinem jetzigen Problem finde ich aber nicht wirklich das erlösende Kapitel
    Ich lerne normalerweise auch immer aus Beispielen und daher hatte ich mir erhofft jemand hilft mir hier weiter - dass ich mein derzeitiges Wissen mit Java-Büchern vertiefen sollte war mir auch so klar, da brauche ich kein Forum dafür um mir die Augen zu öffnen
    Wärst du so nett und würdest mir mit diesem Konstruktor weiterhelfen? Ich dachte ich brauche keinen wenn die VMDatabase variable static ist?

    Edit:
    Oh, falls du meintest, dass jede dieser Klassen jeweils noch Konstruktoren braucht, um die dort angegebenen globalen Variablen zu setzen - sowas weiss ich normalerweise. Das Problem welches ich habe ist, dass mir die oben genannten Klassen gegeben wurden und man mir sagte "Okay, so füllst du nun deine Datenbank". Deswegen kam ich auch so durch einander...
    Geändert von mysticado (22.10.11 um 11:57 Uhr)
     

  6. #6
    Avatar von j2se
    j2se j2se ist offline Mitglied Silber
    Registriert seit
    Oct 2011
    Beiträge
    94
    Blog-Einträge
    1
    Zitat Zitat von mysticado Beitrag anzeigen
    Hallo Leute,ich habe eine Anfänger-Frage zu Java. In einer Aufgabe soll ich eine "Datenbank" füllen, sprich ich habe eine Klasse VMDatabase und über die soll ich auf einer anderen Stelle ausgelesene Werte intern (in der Memory) speichern. Am besten ihr schaut euch zuerst die Klassen an:
    1. Die Werte für die Klasse VirtualMachine kann man über den entsprechenden Konstruktor setzen lassen. Die andere (schlechtere) Variante wäre es, für jedes Feld eine setFeldname() Methode zu schreiben. Damit Du die Werte aus den Feldern wieder lesen kannst, fehlen die entsprechendende Getters.

    2. In der Klasse NetworkEntity fehlt noch eine Methode addVM(VirtualMachine vm), welche die Liste mit VirtualMachine füllt.

    3. In der Klasse VMDatabase wurde ich einen Konstruktor erstellen, welcher als Parameter eine Referenz des Typs ArrayList<NetworkEntity> akzeptiert.

    Sag mir Bescheid, wenn Du Beispiele brauchst. In der HTML-Ausgabe von der Java ist auch eine Insel 9. Auflage findest Du gute Hinweise insbesondere im Kapitel 5.5.1 Konstuktoren schreiben und Kapitel 5.2.6 Getters und Setters nach der JavaBeans-Spezifikation. Und zu Deiner Problemstellung schadet es nicht, Kapitel 10 Architektur, Design und Objektorientierung zu lesen. Fragen kannst Du natürlich hier posten.
    Geändert von j2se (22.10.11 um 12:25 Uhr)
     

  7. #7
    SE Tutorials.de Gastzugang
    Na wenigstens eine höffliche und konkrete Fragestellung bei der man gerne Hilft soweit man kann ... im Gegensatz zu dem was ich gerade an anderer Stelle hier im Forum gelesen habe ... genug OT.

    Dann fangen wir mal an :

    1) Das STATIC ist eigentlich unnötig. STATIC bewirkt lediglich das ein Objekt satisch in den Kontext gelinkt wird ... es hat aber nichts damit zu tun ob und wie man es manipulieren kann.
    2) Das ganze ist ziemlich verschachtelt ... darum wird ein einfaches networkEntities.add() sehr komplex aussehen.
    3) Ja ... die Konstruktoren fehlen hier auf jeden Fall. In der "Datenbank" würde ich mit einem private Objekt arbeiten und es mit Gettern und Settern zugänglich machen ... ansonsten ist es nichts anderes als wenn du deine Liste an irgend einer anderen Stelle im Code hast ...

    Wenn ich das ganze mal nach meinen Gewohnheiten strukturieren würde würde ungefähr sowas hier bei raus kommen :

    VMDatabase
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    public class VMDatabase
    {
        private List<NetworkEntity> networkEntities=null;
        public VMDatabase() { networkEntities=new ArrayList<NetworkEntity>() }
        public boolean add(NetworkEntity networkEntity) { return networkEntities.add(networkEntity); }
        public void add(int i, NetworkEntity networkEntity) { networkEntities.add(i, networkEntity); }
        public void clear() { networkEntities.clear(); }
        public boolean contains(Object o) { return networkEntities.contains(o); }
        public NetworkEntity get(int i) { return (NetworkEntity)networkEntities.get(i); }
        public int indexOf(Object o) { return networkEntities.indexOf(o); }
        public boolean isEmpty() { return networkEntites.isEmpty(); }
        public Iterator<NetworkEntity> iterator() { return (Iterator<NetworkEntity>)networkEntities.iterator(); }
        public NetworkEntity remove(int i) { return (NetowrkEntity)networkEntities.remove(i); }
        public boolean remove(Object o) { return networkEntities.remove(o); }
        public NetworkEntity set(int i, NetworkEntity networkEntity) { return (NetworkEntity)networkEntities.set(i, networkEntity); }
        public int size() { return networkEntities.size(); }
        public List<NetworkEntity> subList(int f, int t) { return (List<NetworkEntity>)networkEntities.subList(f, t); }
        public Object[] toArray() { return networkEntities.toArray(); }
        public void setList(List<NetworkEntity> networkEntities) { this.networkEntities=networkEntites; }
        public List<NetworkEntity> getList() { return networkEntities; }
    }

    NetworkEntity
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    public class NetworkEntity
    {
        private String ip="";
        private List<VirtualMachine> virutalMachines=null;
        private NetworkEntity() { }
        public NetworkEntity(String ip, List<VirtualMachine> virtualMachines) { this.ip=ip; this.virtualMachines=virtualMachines; }
        public String getIp() { return ip; }
        public List<VirtualMachine> getMachines() { return virtualMachines; }
    }

    VirtualMachine
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    public class VirtualMachine
    {
        private String ip="";
        private long stressDuaration=0L;
        private int stressCpuLast=0;
        private int stressRamLast=0;
        private boolean webTraffic=false;
        private int activeUsers=0;
        private String templatePath="";
        private VirtualMachine() { }
        public VirtualMachine(String ip, long stressDuaration, int stressCpuLast, int stressRamLast, boolean webTraffic, int activeUsers, String templatepath)
        { this.ip=ip; this.stressDuaration=stressDuaration; this.stressCpuLast=stressCpuLast; this.stressRamLast=stressRamLast; this.webTraffic=webTraffic; this.activeUsers=activeUSers; this.templatePath=templatePath; }
        public String getIp() { return ip; }
        public long getStressDuaration() { return stressDuaration; }
        public int getStressCpuLast() { return stressCpuLast; }
        public int getStressRamLast() { return stressRamLast; }
        public boolean getWebTraffic() { return webTraffic; }
        public int getActiveUsers() { return activeUsers; }
        public String getTemplatePath() { return templatePath; }
    }

    Zu erkennen sind die privaten NULL-Konstruktoren die verhindern das man ein "leeres" Objekt erzeugen kann.
    Auch habe ich nicht alle Methoden von ArrayList übernommen sondern nur einige *die MEINES Erachtens nach wichtigen* und jeweils einen Setter und Getter für die komplette Liste.
    Das ganze ist noch recht statisch und kann auf Veränderungen einzelner Objekte nur reagieren in dem die alten Objekte aus der Liste entfernt und neue Objekte mit aktuellen Werten hinzugefügt werden.

    Wie gesagt : das ist mein Stil zu programmieren ... und mein Lösungsansatz wie ich die Klassen implementiert hätte. Ich hoffe ich konnte dir damit erstmal halbwegs helfen.
     

  8. #8
    Avatar von j2se
    j2se j2se ist offline Mitglied Silber
    Registriert seit
    Oct 2011
    Beiträge
    94
    Blog-Einträge
    1
    Im obigen Code wimmelt es von Tippfehlern. Ich habe diese korrigiert sowie nach dem üblichen Standards für Java-Code formatiert. Die Klassen sind im beiliegenden Zip-File abgelegt und nun auch kompilierbar, da nun auch die Klassen ausserhalb von java.lang importiert werden.
    Angehängte Dateien Angehängte Dateien
    SE bedankt sich. 

  9. #9
    SE Tutorials.de Gastzugang
    @j2se
    Danke für die Mühe ...
    Ich habe meinen Code nicht getestet sondern einfach so zusammengeschrieben ... Tippfehler also nicht ausgeschlossen.

    Was die Import-Statements angeht habe ich diese der Einfacheit halber weggelassen ... das diese zum Compilen aber notwendig sind sollte eigentlich klar sein.

    Zu den Standards : ich würde das eher Stil als Standard nennen ...
    Es ist zwar richtig das die Java-Konventionen das eine oder andere vorschreiben ... oder besser : eine Empfehlung geben wie man es machen sollte ... jedoch trifft es nicht ganz meinen persönlichen Geschmack ... und ob man nun
    Code java:
    1
    2
    3
    4
    
    public <T> someMethod(<T> ...)
    {
        <T> someName=<T>;
    }
    oder
    Code java:
    1
    2
    3
    
    public <T> someMethod(<T> ...) {
        <T> someName = <T>;
    }
    schreibt ist ja für die Funktion egal ...
     

Ähnliche Themen

  1. Anfänger-Probleme mit Klassen
    Von Rene42 im Forum C/C++
    Antworten: 9
    Letzter Beitrag: 06.01.10, 13:53
  2. Klassen erstellen-> Anfänger
    Von Steusi im Forum PHP
    Antworten: 11
    Letzter Beitrag: 17.12.08, 15:55
  3. [Anfänger] Problem mit Klassen
    Von dennislassiter im Forum .NET Café
    Antworten: 4
    Letzter Beitrag: 04.09.05, 19:02
  4. Klassen Problem mit DB Zugriff
    Von Gray im Forum PHP
    Antworten: 2
    Letzter Beitrag: 15.03.05, 13:51
  5. Zugriff auf Klassen
    Von FIAzubi im Forum .NET Archiv
    Antworten: 0
    Letzter Beitrag: 08.07.04, 12:09