[Java] kleineres Java Übungsprojekt

NemesisFS

Lt. Commander
Registriert
Sep. 2008
Beiträge
1.295
Hi,
ich lerne atm. im Studium Java, doch nun sind Semesterferien. Ich würde gerne ein wenig weiterlernen und dazu ein mehr oder minder umfangreiches Projekt anfangen, wobei ich etwas lerne. Leider habe ich keine Idee, was ich in der Beziehung machen könnte, daher frage ich hier...
Bis jetzt behersche ich mehr oder minder gut folgendes:
Funktionen
Arrays
Objekte
Rekursion
Exceptions
dynamische Datenstrukturen
sind so ein paar Begriffe die mir spontan einfallen, hoffe es gibt ein wenig aufschluss darüber, wo ich atm stehe.

lg Nemesis
 
- Netzwerk
- ParallelProgrammierung
- GUI's (einfachkeitshalber swing)

Wähl was aus ;)
Netzwerk empfand ich unter Java mit "nio" nicht schwierig, und machbar um das selbst zu lernen..
 
hmm, in welche richtung soll das ganze denn gehen?

eher grafische darstellung, algorithmen, kommunikationssoftware etc.

wie wärs mit einem "klassiker": ein grafischer sudokulöser, der eine lösung findet und dann nachfragt, ob er nach weiteren suchen soll (natürlich bisherige lösungen merken).

wenns schwierig/länger werden soll, das ganze noch speicherbar als datei und ggf. server/client, wobei der server löst und der client darstellt.

EDIT: uns würde es noch helfen, wenn du bisherige projekte falls vorhanden auflistest ... dann können wir uns daran orientieren und wir listen nichts überflüssiges auf.
 
Zuletzt bearbeitet:
Wie wärs mit dem Spiel "Schiffe versenken" mit einer KI und einem Netzwerkmodus.
Dafür benötigst du:
-Arrays
-GUIs
-Objekte
-Funktionen
-Logik
-....
Ich denke, dass das Spiel ein gutes Überprojekt wäre.
 
Du studierst Java und hattest noch nichts mit GUIs am Hut?

Ich lerne in der Schule seit nem halben Jahr Java und wird arbeiten gerade Swing ab.

Verrückte Welt...

Naja, schau die GUIs an, erst Swing, danach AWT. Währenddessen fallen dir sicher einige Übungsprojekte ein.
 
Das was in nem halben Jahr Schule gemacht wird, wird in 1 Monat Studium gepresst. Von daher kein Wunder. GUI, etc. muss man sich eh selber oder in Rahmen von Projekten beibringen.
 
Also im Allgemeinen finde ich Netzwerke sehr spannend, Algorithmen eher weniger, die lerne ich sowieso in jedem meiner Fächer :D

Schiffe versenken klingt auf jedenfall spannend, auf den ersten Blick zumindest jedoch ein wenig umfangreich...

GUIs haben wir noch garnicht behandelt, keine Ahnung woran das liegt aber naja :D

EDIT: Vererbung haben wir auch gemacht fällt mir grad auf...
 
Zuletzt bearbeitet:
hmm, ohne gui elemente fällt eine menge raus ... und algorithmen willst du auch nicht unbedingt

nur netzwerk wird echt schwierig. im endeffekt erstmal eine grundsatzentscheidung: server/client oder p2p.

wie klingt sowas: versuch ein eigenes torrent system zu bauen.

also das volle programm:
- gleichzeitig von mehreren quellen teile der selben datei laden
- bei bekanntwerden von neuen quellen andere teilnehmer darüber informieren
- eigenes schichtenmodell nachbauen (informiere dich, was tcp alles bewerkstelligt und versuche sowas nachzubauen)
- etc...

server/client fällt eher in die schiene: algorithmen auf server, gui auf client.

EDIT: du kannst auch auf vielen seiten aufgaben finden, in denen du aussuchen kannst. typsiche wären uni-seiten oder rent-a-coder etc.
aufgaben werden ja meistens nicht vom programmierer, sondern von einem kunden gestellt, der dann (meist) recht genaue ansprüche hat.
 
Zuletzt bearbeitet:
klingt auf jedenfall spannend, ich denke ich werde mir erstmal einiges zur netzwerkprogrammierung durchlesen und auch die guis mal betrachten, kennt jemand seiten, wo ich dazu gute informationen bekomme?
 
naja, die GUI Geschichten (swing, awt) sind auch kein Schwerpunkt in einem Informatikstudium. Sowas hat eher nur eine untergeordnete Bedeutung.

Mein Tipp: mache was mit JavaEE! Lade dir z.B. die aktuelle Netbeans Version mit Glassfish 3 runter und taste dich langsam an JSF 2, Primefaces/Richfaces/Openfaces, JPA etc. ran.

Das sind Dinge, die zur Zeit in der Berufswelt eher gesucht werden.
 
ich habe mir seit ich den thread eröffnet habe ein wenig was zur behandlung von dateien/ordnern und streams durchgelesen, da ich für die projekte die mich interessieren (ftp/torrent) das ja auch brauche... habe jetzt das mit dem p2p torrentklon als übergeordnetes ziel, zunächst werde ich mich am ftp client versuchen, danach am server.
 
Ich habe jetzt erstmal mit nem kleinen chat client-server angefangen. der client ist so weit fertig mangels server noch nicht getestet.
Beim Server habe ich nun ein konzeptionelles Problem. Ich habe bis jetzt folgendes:
Code:
package ChatServer;

import java.io.*;
import java.net.*;
import java.util.Date;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Server {

    ServerSocket serversocket;
    Date start = new Date();
    boolean ok_server = true;

    Server(int port) {
        try {
            serversocket = new ServerSocket(port);
        }
        catch(IOException e) { System.out.println(e); }
        System.out.println("Server auf Port " + port + " erstellt.");
    }

    public static void main(String [] args) {
        Server server = (args.length == 0) ? new Server(1337) : new Server(Integer.parseInt(args[0]));
        server.startServing();
    }

    void startServing() {
        ExecutorService executor = Executors.newCachedThreadPool();
        try {
            while(ok_server == true) {
                executor.execute(new Connection(serversocket.accept()));
            }
        }
        catch(IOException e) { System.out.println(e); }
    }

    class Connection implements Runnable {

        Socket connect;
        BufferedReader in;
        BufferedWriter out;

        Connection(Socket sock) {
            try {
                connect = sock;
                in = new BufferedReader(new InputStreamReader(connect.getInputStream()));
                out = new BufferedWriter(new OutputStreamWriter(connect.getOutputStream()));
            }
            catch(IOException e) { System.out.println(e); }
        }

        @Override public void run() {
            Output output = new Output(out);
            Input input = new Input(in);
            Thread inThread = new Thread(input);
            Thread outThread = new Thread(output);
            inThread.start();
            outThread.start();
        }


        class Input implements Runnable {

            BufferedReader in;

            Input(BufferedReader in) {
                this.in = in;
            }

            @Override public void run() {

            }
        }


        class Output implements Runnable {

            BufferedWriter out;

            Output(BufferedWriter out) {
                this.out = out;
            }

            @Override public void run() {

            }
        }
    }
}

Für jede angenommene Exception wird ein Thread erstellt, der wiederum 2 weitere Threads erstellt, jeweils für in und output. so weit so problemfrei. Nun Frage ich ich jedoch, wie ich das folgende problem lösen soll:
die nachrichten sollen als strings gespeichert werden, vorerst nur mit zeit und nahricht, später mit nickname dazwischen.
Die Strings sollen vorerst in einen buffer geschrieben werden, in den jede nachricht, die noch nicht von jedem aktuellen client versendet wurde gespeichert wurde. wird eine nachricht aktuell nichtmehr benötigt, soll diese in eine datei geschrieben werden.
lesend soll jeder output thread einen zeiger haben, der auf die erste noch nicht versendete zeile im buffer zeigt.
so oder so ähnlich stelle ich mir das vor, bin natürlich für verbesserungsvorschläge offen.
irgendjemand eine idee wie das zu implementieren wäre?
 
Du hast das etwas zu kompliziert gestaltet. Das sie irgendwie viel zu viele Threads.

Es reicht, wenn du einen Thread hast, der den Server-Socket anhört und bei Bedarf pro Person einen, ich nenne ihn mal, Client-Thread startet.
Des weiteren benötigst du für deinen Messagepuffer einen Thread, der zB mit Pipes (PipedOutputStream() & PipedInputStream()) oder Shared Memory mit allen Client-Threads kommunizieren kann.
 
Zurück
Oben