Zum Inhalt springen

Ulfmann

Mitglieder
  • Gesamte Inhalte

    1.350
  • Benutzer seit

  • Letzter Besuch

  • Tagessiege

    14

Beiträge von Ulfmann

  1. Jetzt isses ja auch richtig so. Das Problem was ich urprünglich hatte, war der mehrmalige Aufruf von readObject() des gleichen InputStreams (der soviele Objekte aus der Datei sammeln soll, wie drin sind). Nun steckt in meiner Datei einfach ein Vector<Object> und die Daten werden dann da rein- und rausgeschaufelt. Somit ist der besagte mehrmalige Aufruf nich mehr nötig. :)

  2. Ich hoffe, ich hab dich jetzt richtig verstanden.

    Einfaches Beispiel, was die Anforderungen erfüllt:

    
    import java.io.FileInputStream;
    
    import java.io.FileOutputStream;
    
    import java.io.IOException;
    
    import java.io.ObjectInputStream;
    
    import java.io.ObjectOutputStream;
    
    
    public class FileTest
    
    {
    
    	private String data;
    
    	public String getDataString() //String aus der Datei lesen und zurück geben
    
    	{
    
    		try
    
    		{
    
    			FileInputStream fileInput = new FileInputStream("Strings.ser");
    
    			ObjectInputStream objectInput = new ObjectInputStream(fileInput);
    
    			data = (String) objectInput.readObject();
    
    			objectInput.close();
    
    		}
    
    		catch (ClassNotFoundException ex) { ex.printStackTrace();  }
    
    		catch (IOException ioe)           { ioe.printStackTrace(); }
    
    		return data;
    
    	}
    
    
    	public void setDataString(String data) //Datei neu anlegen und den String reinschreiben 
    
    	{
    
    		try
    
    		{
    
    			FileOutputStream fops = new FileOutputStream("Strings.ser");
    
    			ObjectOutputStream oos = new ObjectOutputStream (fops);
    
    			System.out.println("Schreibe " + data + " in die Datei.");
    
    			oos.writeObject(data);
    
    			oos.close();
    
    		}
    
    		catch (IOException ex)	{ System.err.println(ex.toString());	}
    
    	}
    
    }
    
    
    
    import java.io.*;
    
    
    public class FileTester 
    
    {
    
    	public static void main(String [] args)
    
    	{
    
    		String eingabe = "";
    
    		System.out.println("Bitte einen String eingeben.");
    
    		BufferedReader inData = new BufferedReader(new InputStreamReader(System.in));
    
    		try
    
    		{
    
    			eingabe = inData.readLine();
    
    		}
    
    		catch (IOException e) { e.printStackTrace(); }
    
    
    		FileTest test = new FileTest();
    
    		test.setDataString(eingabe);
    
    
    		System.out.println("Inhalt der Datei: " + test.getDataString());
    
    	}
    
    }
    
    

    Ich benutzte das JDK 1.6.0_13

  3. Keine Exceptions bei dir?!?

    Das Problem trat beim 2. Aufruf von (Date) objectInput.readObject() auf. Ich hab auch probiert, die Schleife wegzulassen und manuell mehrere dieser Anweisungen nacheinander auszuführen - gleiches Resulat.

    Gespeichert hab ich die Datei so:

    		try
    
    		{
    
    			FileOutputStream fops = new FileOutputStream("Dates.ser");
    
    			ObjectOutputStream oos = new ObjectOutputStream (fops);
    
    			oos.writeObject(*das was da rein sollte*);
    
    			oos.close();
    
    		}
    
    		catch (IOException ex)
    
    		{
    
    			System.err.println(ex.toString());
    
    		}
    ... wobei ich für FileOutputStream den anderen überladenen Konstruktor mit nem boolean Parameter benutzt hab, da ich ja wollte, dass er neuen Inhalt hinten dran hängt. Ich hab mich jetzt dafür entscheiden, alle Date Objekte (und jedes neu angelegte) in einen Vektor zu schaufeln und diesen einfach in die Datei zu speichern. Das Auslesen des Vectors und die Verwendung des Inhalts ist dann trivial. Zur Vollständigkeit hier meine Lösung (für kosmetische Verbesserungsvorschläge bin ich immer dankbar)
    	private Vector<Date> dates = new Vector<Date>(getDates());
    
    
    	public Vector<Date> getDates() //Daten aus der Datei lesen und zurück geben
    
    	{
    
    		try
    
    		{
    
    			FileInputStream fileInput = new FileInputStream("Dates.ser");
    
    			ObjectInputStream objectInput = new ObjectInputStream(fileInput);
    
    			dates = (Vector) objectInput.readObject();
    
    			objectInput.close();
    
    		}
    
    		catch (ClassNotFoundException clenfe)
    
    		{
    
    			System.err.println(clenfe.toString());
    
    		}
    
    		catch (IOException ioe)
    
    		{
    
    			System.err.println(ioe.toString());
    
    		}
    
    		return dates;
    
    	}
    
    
    	public void setDates() //Datei neu anlegen und den Vektor reinschreiben 
    
    	{
    
    		try
    
    		{
    
    			FileOutputStream fops = new FileOutputStream("Dates.ser");
    
    			ObjectOutputStream oos = new ObjectOutputStream (fops);
    
    			oos.writeObject(dates);
    
    			oos.close();
    
    		}
    
    		catch (IOException ex)
    
    		{
    
    			System.err.println(ex.toString());
    
    		}
    
    	}

  4. Hallo Leute,

    ich steck mal wieder fest und kann keine Lösung zu meinem Fehler finden. Vorgang: Ich erzeuge mir einen Vektor, wo Objekte vom Typ Date reinsollen. Dafür wird die Methode getAllDates() aufgerufen, die mir einen Vektor zurück gibt.

    Fehlermeldung:

    java.io.StreamCorruptedException: invalid type code: AC

    at java.io.ObjectInputStream.readObject0(Unknown Source)

    at java.io.ObjectInputStream.readObject(Unknown Source)

    at EventHandler.getAllDates(EventHandler.java:137)

    at CalendarStart.main(CalendarStart.java:11)

    Methodenaufruf:

    		Vector<Date> vector = new Vector<Date>(handler.getAllDates());
    Methode:
    	public Vector<Date> getAllDates()
    
    	{
    
    		Vector<Date> dates = new Vector<Date>();
    
    		try
    
    		{
    
    			FileInputStream fileInput = new FileInputStream("Dates.ser");
    
    			ObjectInputStream objectInput = new ObjectInputStream(fileInput);
    
    
    			while(fileInput.available() > 0)
    
    			{
    
    				dates.addElement((Date) objectInput.readObject());
    
    			}
    
    			objectInput.close();
    
    		}
    
    		catch (ClassNotFoundException ex)
    
    		{
    
    			ex.printStackTrace();
    
    		}
    
    		catch (IOException ioe)
    
    		{
    
    			ioe.printStackTrace();
    
    		}
    
    		return dates;
    
    	}

    Kann wer helfen?

    Danke im Voraus!

    Edit: Achso und um das in den Kontext einzubetten: Ich bau mir ein Terminverwaltungstool, dass Objekte vom Typ Date serialisiert und beim speichern in eine Datei (hier "Dates.ser") reinschreibt. Und die wiederum hätte ich gern komplett ausgelesen und in dem Vector gespeichert. So is mein Plan.

  5. Und ich empfehle dir dieses Tutorial: Java Tutorial interaktiv - Programmieren lernen mit Java

    Damit hab ich mich vor ner Weile in Java eingearbeitet. Das Insel-Buch finde ich (vorallem im Vergleich zum Tutorial) unpraktisch für den Einstieg. Zum Einen findet man im Tutorial nach jedem Kapitel Übungsaufgaben, z.B. auch den Taschenrechner und zum Andern greift es nicht schon sehr früh in die Theorie der Objektorientierung, wie es in der Fachliteratur ja oft der Fall ist.

    Viel Erfolg dabei.

  6. Ich hätte wetten können, dass mir dieses Buch als erstes vorgeschlagen wird :-)

    Ja, natürlich ist mir dieses openbook bekannt, aber wie schon angedeutet, ist es auf Dauer absolut nervig, sowas am Rechner zu lesen. Auch inhaltlich finde ich es nicht 100% überzeugend, auch wenn vielerseits darauf verwiesen wird. Einiges kommt mir aber deutlich zu kurz, Anderes wird bis ins kleinste Detail zerkaut, es fehlen Übungsbeispiele und es ist oft einfach nur sehr trocken, was mich unterm Strich davon abhält, es mir in Papierform zu kaufen.

    Ich klapper grade das üppige Angebot bei amazon.de durch und lese mir die Rezensionen durch. Zugegeben lege ich die Messlatte relativ hoch, weil ich noch die sehr gute Java Literatur ("Handbuch der Java Programmierung", 2008, Addison-Wesley) im Hinterkopf habe. Ich kann ja posten, auf welches Buch meine Wahl gefallen ist.

  7. Hallo,

    ich bräuchte mal zu folgender Sache Eure Meinungen. Ich hab letztes Jahr im August meine Ausbildung zum Fachinformatiker / Anwendungsentwicklung begonnen. Man kann es als Vor- oder Nachteil sehen, aber meine Ausbildung kommt einem Selbststudium gleich. Das erste halbe Jahr habe ich nichts anderes gemacht, als Java zu erlernen (mit Eclipse). Das ganze lief mit mehreren Büchern, online Tutorials und weitestgehend auf eigene Faust.

    Was mir nun in die Quere kommt ist die Berufsschule, in der wir mit C# arbeiten. Erfreulich daran ist erstmal die syntaktische Ähnlichkeit, aber worum es mir nun geht, ist anständige Fachliteratur für diese Sprache, die mir das Einarbeiten (mit Visual C#) erleichtern kann. Was wir in der Schule vermittelt bekommen, ist ein Witz und Handbücher am Rechner lesen ist keine langfristige Lösung.

    Gibt es Erfahrung eurerseits hierzu?

    Danke vorweg für Ratschläge.

  8. Danke, mittlerweile hab ichs schon gelesen. Ich hab auch gar nicht darauf geachtet, von wann dieses Tutorial ist, weil ich das besagte Problem nur schnell nachgegoogled hab.

    Ursache hierfür war übrigens (jetzt werd ich mir hier Feinde machen), dass ich mich mit C# einarbeite(n muss, Berufsschule ist Schuld) und mich in diesem Zuge erneut mit den Grundkonzepten der Objektorientierung befasse. Und da die Ähnlichkeit dieser beiden Sprachen nicht ernsthaft zu leugnen ist - und ich wiederum in der C# Literatur auf dies Thema stieß - musste ich es gleich mal hier prüfen.

    Das nur am Rande :-)

  9. Hallo,

    ich hab ein Verständnisproblem in folgender Sache:

    Zitat aus einem JavaTutorial

    Der default-Konstruktor wird auch dann verwendet, wenn ein Objekt mit einem parameterlosen new-Aufruf erzeugt wird, in der Klasse aber neben parametrisierten Konstruktoren kein parameterloser Konstruktor definiert wurde.

    Das schien mir fraglich und ich probierte das aus:

    
    public class ClassA 
    
    {
    
    	public int var1;
    
    	public int var2;
    
    
    	public ClassA (int arg1, int arg2)
    
    	{
    
    		var1 = arg1;
    
    		var2 = arg2;
    
    	}
    
    }
    
    //-----------------
    
    public class ClassB 
    
    {
    
    	public static void main(String[] args)
    
    	{
    
    		ClassA obj = new ClassA();
    
    	}
    
    }
    
    

    Und wie ich mir dachte, meckert der Compiler bei der Objektinstanziierung, was wiederum heißen würde, die Aussage im Tutorial stimmt nicht (und der Default Konstruktor wird eben nicht aufgerufen, wenn ein parametrisierter Konstruktor definiert wurde).

    Eure Meinungen?

  10. Ja genau, mit der setValue-Methode hatte ich auch schon geliebäugelt, aber da bin ich nun wieder zu dämlich, ihr nen gültigen Parameter mitzugeben. Ich wollte mich damit auch nicht lange aufhalten, dann lass ich das mit dem DateSpinnerModel.

    Danke aber!

  11. Hallo,

    ich such grad nach einer Variante, wie man die Anzeige eines JSpinners (bekommt ein SpinnerDataModel) zurücksetzen kann.

    Anwendungsbeispiel: Der Benutzer tippt in Textfeldern rum und verstellt das Datum im JSpinner, verlässt jetzt aber die Ansicht und ruft sie wieder auf. Textfelder zu bereiningen, ist einfach, aber wie ist das beim JSpinner? Der behällt den verstellten Wert.

    Meine erste Idee war quick & dirty, in dem mein dateSpinner mit

    dateSpinner.setModel(new SpinnerDateModel());

    einfach ein neues Model kriegt. Weiß jemand einen eleganteren Weg ?

  12. Ich wollte erstmal deine Antwort abwarten, aber meine Idee war gleich, den oberen Bereich, der das Bild umfasst, in nem eigenen Panel zu halten und diesem wiederum dein Bild hinzuzufügen mit BorderLayout.CENTER.

    Ich denk so müsste es gehen.

  13. Wenn die Hasen nach 4 Monaten sterben, dann stirbt dein "Initialhase" nach Monat 3 (0,1,2,3). Welcher Hase stirbt dann nach Monat 4? Da stirbt keiner, wenn ich nicht grad nen Brett vorm Kopf habe :)

    Endlich jemand meiner Meinung. Das hab ich auch schon versucht, dem Herrn zu erklären :-) Wir haben uns darauf geeinigt, dass es in erster Linie eine Verständnisfrage ist. In meinen Augen gibt es aber auch keinen Nachwuchs in Monat 1 (bzw. im 2. Monat). Denn wenn ein Hase 2 Monate braucht, um fruchtbar zu werden, kann es definitiv erst in Monat 3 Nachwuchs geben. Aber das hatten wir alles schon ...

    Nächste Woche is wieder Berufsschule, mal gucken was mein Lehrer meint. Im Übrigen schreiben wir Montag auch ne Klausur über (u.A.) Rekursion, ich krieg die Krise wenn sowas rankommt!

  14. Ok, mit der Begründung kann ich leben. Nichtsdestotrotz seh ich es anders - wie du schon sagst, das ist tatsächlich ne Verständnisfrage und ich habs anders aufgefasst.

    Wenn ich dran denk, werd ich die Aufgabe demnächst meinem AS-Lehrer ma auf den Tisch packen, mal sehen was der meint.

    Bis dahin genießt die Sonne :cool:

  15. Es freut mich ja, dass Ihr Euch so hierdran beteiligt, obwohl ich schon ziemlich genervt von dieser Aufgabe bin.

    @ DominikJ: Ich will partout nicht kapieren, wieso du in Monat 1 schon Zuwachs hast. Der Hase braucht doch 2 Monate um fruchtbar zu werden und erst dann gibts Kinder, sprich in Monat 3 und 4. Als Folge daraus dürfte (bei dir) in Monat 4 auch kein Hase sterben, weil ja keiner im 2. Monat geboren wurde.

    Also entweder lieg ich falsch und eure Variante passt so, oder meine Einwände stimmen und Euer Algorithmus damit nicht.

  16. Entschuldige, wenn ich Dich missverstehe, aber deine Ausgabe kann nich richtig sein. Du hast im 2. Monat z.B. nicht 2 Hasen, sondern erst den einen - der sich nicht vermehren konnte, da noch nicht fruchtbar. Wie Klotzkopp schon richtig bemerkte, kriegt ein Hase nur im 3. und 4. Monat Nachwuchs. An anderen Stellen (ab dem 6. Monat aufwärts eigentlich) zweifel ich deine Werte auch stark an.

    Wie würde deine Ausgabe denn aussehen, wenn du das Sterben nicht berücksichtigst oder anders - davon ausgehst, dass kein Hase stirbt?

  17. Hi,

    ja, das sind ja die Base Cases, bzw. die Abbruchbedingungen. Die Hürde, oder die beiden Fragen, an denen ich mit meinem Ansatz nicht weiter kam, ist (1) stirbt ein Weibchen im 4. Monat oder im darauffolgenden? und (2) da in den ersten beiden Monate ja jeweils nur ein Weibchen vorhanden ist, wird es dann in Monat 4 und 5 bzw. 5 und 6 zweimal als "gestorben" gezählt oder dann abgezogen? Ich weiß, ich mach es sicherlich komplizierter als es ist, aber mein neuer Ansatz ging dann in die richtung:

    n = (n-1) + (n-2) - (zuwachs von (n-3))

    Das stimmte auch mit meinen Skizzen und Nebenrechnungen überein.

    Nach etwas googeln und weiterer Hilfe hab ich dann ein ähnliches Beispiel gefunden, sodass die Lösung ziemlich sicher Folgendes ist:

    
    public int fib(int n)
    
    {
    
    	if (n <= 0)
    
    		return 0;
    
    
    	if (n == 1)
    
    		return 1;
    
    
    	if (n == 2)
    
    		return 1;
    
    
    	else
    
    	{
    
    		return fib(n-1) + fib(n-2) - fib(n-5);
    
    	}
    
    }
    
    

  18. Hallo,

    ich verzweifel hier an einer Übungsaufgabe. Die Fibonacci Reihe wird wohl bekannt sein, zur Sicherheit hier das Basisbeispiel:

    Angenommen, ein weibliches Kaninchen ist 2 Monate nach der Geburt fruchtbar und wirft dann jeden Monat genau ein neues, weibliches Kaninchen-Baby. Wenn mit einem Weibchen begonnen wird, sind es wie viele Weibchen nach 10 Monaten? Man geht davon aus, dass es ausreichend männliche Kaninchen gibt um die maximale "Produktion" zu gewährleisten und kein Hase stirbt.

    Damit kommt man ja schnell auf die Reihe 1,1,2,3,5,8,13,21,34,55 und das n-te Glied kann mit fib(n) = fib(n-1) + fib(n-2) definiert werden.

    Soweit, so gut. Nun - und da komm ich zu meinem Problem - sterben die Weibchen nach 4 Monaten. Es gilt also, eine Sterberate zu berücksichtigen. Mein erster Ansatz war fib(n) = fib(n-1) + fib(n-2) - fib(n-3) aber das kann nicht hinhauen.

    Das Ganze ist eine Übungsaufgabe zur Rekursion in Java. Da die Formulierung in Quelltext trivial ist, sobald man die Algorithmus gerafft hat, lass ich das auch erstmal weg.

    Ich bedanke mich für jede hilfreiche Idee.

    Gruß.

  19. Ja vielen Dank für die Hilfe, hat mich auch weiter gebracht. Meine Lösung is allerdings noch um einiges kürzer und verständlicher geworden:

    
    public class Recursion 
    
    
    {
    
    	public boolean prime(long n) 
    
    	{
    
    		if(n == 1)
    
    			return false;
    
    
    		return prime(n, n - 1);
    
    	}
    
    
    	private boolean prime(long n, long m) 
    
    	{
    
    		if (m == 1) 
    
    		{
    
    			return true;
    
    		} 
    
    		else if (n % m == 0)
    
    		{
    
    			return false;
    
    		} 
    
    		else 
    
    		{
    
    			return prime(n, m - 1);
    
    		}
    
    	}
    
    }
    
    
    
    public class RecursionTest
    
    {
    
    	public static void main(String args[])
    
    	{
    
    
    		Recursion prm = new Recursion();
    
    		boolean isDivisible = prm.prime(4);
    
    		System.out.print("Primzahl: " );
    
    		if (isDivisible == true)
    
    			System.out.print("ja");
    
    		else
    
    			System.out.print("nein");
    
    	}
    
    }
    
    

    Und na klar wäre es mit ner herkömmlichen Schleife einfacher, aber es ging ja grad um Rekursion.

    Danke nochmal.

  20. So ungefähr dann?! Damit bekomm ich aber n StackOverFlow. Aber is die Richtung richtig?

    
    	public boolean prime( int n)
    
    	{
    
    
    		if(n > 2)
    
    			return prime(n, n-1);
    
    		else if (n == 2)
    
    			return true;
    
    
    		else
    
    			return false;
    
    	}
    
    
    	public boolean prime(int n, int d)
    
    	{
    
    		if(n % d == 0)
    
    			return prime(1);
    
    		else
    
    			return prime(n, n-1);
    
    	}
    
    

  21. Hi Leute,

    Ich häng an einer Übungsaufgabe zu Rekursion. Ich soll da nix abgeben und mach's aus freien Stücken, weil ich das kapieren will und muss. Die berühmte Aufgabe mit den Fibonacci Zahlen krieg ich hin, der Algorithmus lässt sich auch leicht begreifen.

    Hier mein Problem:

    A prime number is an integer that cannot be divided by any integer other than one and itself. For example, 7 is prime because its only divisors are 1 and 7. The integer 8 is not prime because its divisors are 1, 2, 4, and 8.

    Another way to define prime is:

    prime(N) = prime(N, N-1)

    prime(N, 1) = true

    prime(N, D) = if D divides N, false

    else prime(N, D-1)

    For example,

    prime(4) = prime(4,3)

    prime(4,3) = prime(4,2)

    prime(4,2) = false

    Another example,

    prime(7) = prime(7,6)

    prime(7,6) = prime(7,5)

    prime(7,5) = prime(7,4)

    prime(7,4) = prime(7,3)

    prime(7,3) = prime(7,2)

    prime(7,1) = true

    Translate the math-like definition of prime into two Java methods that return boolean. Use the % operator to test divisibility. Put your method into a class, write a testing class, and test your program.

    Aufgabenstellung ist also, eine Zahl n zu überprüfen, ob sie eine Primzahl ist - und zwar rekursiv auf Teilbarkeit durch alle ihre Vorgänger.

    Bisher hab ich das hier:

    
    public class Recursion 
    
    {
    
            public boolean prime( int n)
    
    	{
    
    		if (n == 1)
    
    			return true;
    
    
    		if((n % n-1) != 0 )
    
    			return prime(n-1);
    
    
    		else
    
    			return false;
    
    	}
    
    }
    
    
    
    
    public class RecursionTest
    
    {
    
    	public static void main(String args[])
    
    	{
    
    
    		Recursion prm = new Recursion();
    
    		boolean isDivisible = prm.prime(4);
    
    		System.out.print("Primzahl: " );
    
    		if (isDivisible == true)
    
    			System.out.print("ja");
    
    		else
    
    			System.out.print("nein");
    
    	}
    
    }
    
    

    Dass es so nicht funktioniert, ist mir klar, nur ich hab keine Ahnung wie ich die prime() Methode richtig schreiben soll. Kann mir wer weiter helfen?

    Vielen Dank schonmal.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...