Infoprojekt

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Infoprojekt

    Hallo,
    also wir haben jetzt ein Projekt im Infounterricht aufbekommen. Unzwar soll jeder ein Programm schreiben und Montag müssen wir sagen was wir machen wollen. Jedenfalls bin ich nicht so gut in Java und weiß auch noch gar nicht was ich machen werde. Es ist ihr eigentlich völlig egal was wir machen, hauptsache ein Programm. Sie hatte uns auch Vorschläge gebracht wie 4 gewinnt, Schiffe versenken, Vokabelprogramm, Datenbank...
    Ich fand die Idee mit dem Vokabelprog ganz gut, allerdings meinte sie dass man dafür ne datei einbinden muss. Das hatten wir zwar noch nicht im unterricht, aber sie meinte dass wir auch das mit ins prog schreiben können, was wir uns selbst beigebracht haben...
    Na ja soviel hatten wir auch noch nicht in Java, Felder-Objekte-Methoden-Klassen-Schleifen und dann hört es auch schon auf. Graphische Darstellung auch noch nicht...
    Habe auch schon im netz komplett fertige programme gefunden wie 4 gewinnt und minessweeper, aber möchte es nicht einfach "klauen", immerhin könnte ich dann nicht mal erklären was dort gemacht worden ist :-/
    Habt ihr vllt ne idee was ich machen könnte?
  • Bei galileo computing gibts ein tolles, kostenloses Buch:

    http://www.galileocomputing.de/openbook/javainsel6/

    Wenn du irgendwelche Funktionen nachgucken willst oder ähnliches guck da mal in das Inahltverzeichnis.

    Im eine GUI zu erstellen, brauchst du theoretisch gar keine Programmierkenntnisse. In Eclipse (oder auch NetBeans) gibts Editoren für grafische Benutzeroberflächen.
  • Also für den einfachen Dateizugriff (vor allem für Anfänger) empfehle ich die Klasse RandomAccessFile.
    Hier eine deutschsprachige JavaDoc dafür:
    http://www.dpunkt.de/java/Referenz/Das_Paket_java.io/63.html

    Ich gehe mal davon aus, dass ihr Windows benutzt. Da gebe ich dir noch einen Tipp für die Pfadangaben. Ein Beispiel: "C:\test\test.txt" kannst du in Java nicht so einfach schreiben (auch nicht in C, C++, etc), da der \ für Befehle, z.B. Zeilenumbrüche ("\n") reserviert ist. Aus diesem Grund musst du den String so schreiben: "C:\\test\\test.txt". "\\" repräsentiert dann einen einzelnen \.
    Das nur am Rande. :)

    Wenn du noch eine Idee für ein Programm suchst. Ich habe im Gym mal für den programmierbaren Taschenrechner ein Umrechnungsprogramm von Dezimalzahlen in römische Zahlen und umgedreht geschrieben. Das war damals der Renner vor der Mathearbeit. :) Erfordert allerdings etwas Gerhirnschmalz.
  • danke für den link, aber ich kenne den schon @ bennybunny

    na ja trotzdem weiß ich noch nicht was ich machen werde :(


    Nachtrag:

    Also ich habe mich jetzt für ein Vokabelprogramm entschieden, wo man vokabeln hinzufügen kann, und natürlich auch üben kann... habe auch schon angefangen, allerdings möchte sie das, was bei mir unter case 1 steht, in eine methode geschrieben haben... nimmt man da eine public static void methode? und die case 1anweisung ist noch nicht korrekt, man kann zwar das zeug eingeben, aber mir fehlt noch die sache mit dem speichern... weiß nicht wie das funktionieren soll...
    hier mal der bisherige quelltext:

    Quellcode

    1. import Prog1Tools.IOTools;
    2. public class Vokabelprogramm {
    3. public static class Vokabel{
    4. public String deutsch;
    5. public String englisch;
    6. public String franzoesisch;
    7. }
    8. public static void main (String[] args) {
    9. Vokabel[] vokabeln = new Vokabel[10];
    10. Vokabel vok;
    11. // Initialisiere das Feld
    12. for (int i=0;i<10;i++)
    13. vokabeln[i]=new Vokabel();
    14. vok = vokabeln[0];
    15. // Starte das Programm mit einer Ausgabe
    16. System.out.println("===============");
    17. System.out.println("Vokabeltraining");
    18. System.out.println("===============");
    19. // Menue
    20. System.out.println();
    21. System.out.println("1 = Vokabeleingabe");
    22. System.out.println("2 = Vokabeltraining");
    23. int auswahl = IOTools.readInteger("Ihre Wahl: ");
    24. System.out.println();
    25. switch (auswahl){
    26. case 1: // Vokabeln eingeben
    27. System.out.println("Wie viele Vokabeln moechtest du hinzufuegen?");
    28. int anzahl = IOTools.readInteger("Anzahl: ");
    29. System.out.println();
    30. for(int i=0;i<anzahl;i++){
    31. vok.deutsch = IOTools.readLine ("Deutsch : ");
    32. vok.englisch = IOTools.readLine ("Englisch : ");
    33. vok.franzoesisch = IOTools.readLine ("Franzoesisch : ");
    34. System.out.println();
    35. }
    36. break;
    37. case 2: // Vokabeln ausgeben
    38. }
    39. }
    40. }
    Alles anzeigen


    und dann wollte ich noch so 5 vokabeln festlegen, allerdings fehlt mir hier auch das nötige wissen :-/
  • Uahhh da bekommt man ja echt angst ;)

    Nein im Ernst. Dein Programmierstil ist nicht gerade "sauber", was mich aber wundert, dass dein Lehrer dann was gegen die switch Lösung hat ^^
    Ok das ist wirklich verdammt unschön :twisted:

    Wo fängt man denn jetzt am besten an ...
    Irgendwie interessant, dass du anscheinend wenig über Methoden weisst. Find ich sehr erschreckend.

    public sagt aus, "wer" die Methode benutzen darf. Hierbei darf jeder die Methode benutzen, auch andere Klassen. Bei private darf nur die eigene Klasse diese Methode verwenden.
    static bedeutet, dass die Methode ohne Objektinstanz existieren kann. Soll heißen du brauchst kein "new". Du wirst in den seltesten Fällen den Modifier "static" benötigen (Pflicht ist "static" z.B. vor der main-Methode).

    Des weiteren würde ich dir raten nicht deine ganze Logik in die Main-Methode zu packen. Diese Methode dient dem Start des Programms und nicht um dein ganzes Programm da reinzuquetschen.

    Quellcode

    1. private void vokalenEingeben(){
    2. System.out.println("Wie viele Vokabeln moechtest du hinzufuegen?");
    3. int anzahl = IOTools.readInteger("Anzahl: ");
    4. System.out.println();
    5. for(int i = 0; i < anzahl; i++){
    6. Vokabel vok = new Vokabel();
    7. vok.deutsch = IOTools.readLine ("Deutsch : ");
    8. vok.englisch = IOTools.readLine ("Englisch : ");
    9. vok.franzoesisch = IOTools.readLine ("Franzoesisch : ");
    10. System.out.println();
    11. }
    12. }
    Alles anzeigen


    Das hier wäre ein BEISPIEL für ein Methode! Um es gleich vorweg zu nehmen, nur mit dieser Änderung funktioniert dein Programm natürlich nicht!!!!!!

    Wenn du etwas Zeit bzw. Lust hast solltest du dir mal Listen anschauen. Gerade bei sowas bietet es sich an, eine Liste anstatt einem Array zu verwenden.

    Vielleicht später noch etwas mehr.
    Muss jetzt mal weiter arbeiten o_O

    P.S.
    Ich bitte meine Unzulänglichkeiten zu entschuldigen. Ich weiss, dass ich nicht alles 100% genau erklärt habe.
    Ubuntu Edgy * Kernel 2.6.17 * Gnome 2.16 * Beryl
    2 x Athlon MP 1900 * MSI K7D Master-L * 1024 MB ECC DDR333
    Hercules 9800XT 256 MB Ram * 1x 250 GB IDE
    Wasserkühlung
  • Hui, ich kann mich meinem Vorredner nur anschließen. Es ist sehr leicht zu erkennen, dass du sequenzielles Programmieren gewohnt bist. Java hingegen ist eigentlich für objektorientiertes Programmieren gedacht.

    Fangen wir also an.

    Quellcode

    1. public static class Vokabel{
    2. public String deutsch;
    3. public String englisch;
    4. public String franzoesisch;
    5. }

    An dieser Stele fällt mir auf, dass du die Attribute der Klasse Vokabelprogramm.Vokabel public gemacht hast. Das geht zwar, ist aber unüblich. Guter Programmierstiel ist es, die Attribute private zu machen und den Zugriff über get- bzw. set-Methoden zu ermöglichen. (Ich finde es interessant, dass du eine innere Klasse verwendest. Dagegen spricht eigentlich nichts.)

    Quellcode

    1. public static class Vokabel{
    2. public Vokabel(String deutsch) {
    3. this.deutsch = deutsch;
    4. }
    5. private String deutsch;
    6. public String getDeutscheUebersetzung() {
    7. return this.deutsch;
    8. }
    9. public void setDeutscheUebersetzung(String deutsch) {
    10. this.deutsch = deutsch;
    11. }
    12. }
    Alles anzeigen

    An diesem Beispiel siehst du gleich mal, wie man Methoden schreibt.
    "void" bedeutet, dass die Methode keinen Rückgabewert hat.
    Mit "this" kann man Attribute der Klasse von anderen Attributen gleichen Namens unterscheiden.

    Eine vernünftige Programmstruktur tut auch Wunder:

    Quellcode

    1. public class Vokabelprogramm {
    2. public static class Vokabel {
    3. ...
    4. }
    5. public Vokabelprogramm(String pfadZuDerVokabelDatei) {
    6. ladeVokabelDatei(pfadZuDerVokabelDatei);
    7. }
    8. private void ladeVokabelDatei(String pfadZuDerVokabelDatei) {
    9. ...
    10. }
    11. public void vokabelAbfragen() {
    12. ...
    13. }
    14. ...
    15. public static void main (String[] args) {
    16. Vokabelprogramm vp= new Vokabelprogramm(args[0]);
    17. ...
    18. vp.vokabelAbfragen();
    19. ...
    20. }
    21. }
    Alles anzeigen

    Das nur mal als Anregung.
    Die"Methode", die keinen Rückgabewert hat (nicht mal void) und genauso heist wie die Klasse, nennt sich Konstruktor. Dieser wird ausgeführt, wenn man ein so genanntes Objekt (Wichtig! Erkläre ich noch!) dieser Klasse erzeugen will.
    Bleiben wir mal bei meinem Beispiel ganz oben, also der Vokabel-Klasse. Du hast eine Vokabelklasse, aber viele Vokabeln. Diese Vokabeln sind die Objekte der Vokabelklasse. Möchtest du jetzt ein solches Objekt erzeugen (initialisieren) dann rufst du einen Konstruktor der Klasse auf:

    Quellcode

    1. Vokabelprogramm.Vokabel test = new Vokabelprogramm.Vokabel("das ist ein Test");

    Vokabelprogramm.Vokabel ist der Typ/die Klasse des zu erzeugenden Objektes.
    test ist der Variablenname der Klasse.
    new Vokabelprogramm.Vokabel("das ist ein Test") ist der Aufruf des Konstruktors der Klasse.

    Die Angabe "static" ist in der Beziehung Objekt/Klasse von hoher Bedeutung!!!!
    Alles was "static" ist, bezieht sich auf die Klasse. Ein statisches Attribut ist somit einmalig, egal wieviele Objekte die Klasse hat. Überschreibt ein Objekt dieses statische Attribut, so ist es bei allen anderen Objekten auch mit dem Wert überschrieben.

    So, mehr fällt mir nicht ein. Im Prinzip musst du mal die ersten Kapittel eines guten Java-Buches lesen.

    Das mit den Listen darf jemand anderes erklären. :D
  • Moin

    Jetzt ist natürlich die Frage, ob du was lernen willst, oder ob du nur stur das verwendest, was du im Unterricht lernst.

    Aber das ist nicht mein Problem.
    Zum Thema deiner switch-Lösung:

    Quellcode

    1. switch (auswahl){
    2. case 1: // Vokabeln eingeben
    3. vokalenEingeben();
    4. break;
    5. case 2: // Vokabeln ausgeben
    6. break;
    7. default:
    8. System.out.println("Fehlerhafte Eingabe: " + auswahl);
    9. }

    Damit hättest du die ganzen Befehle in eine eigene Methode ausgelagert.
    Jetzt musst du dir nur noch über die Ein-/Ausgabe gedanken machen ^^

    Greetings
    Ubuntu Edgy * Kernel 2.6.17 * Gnome 2.16 * Beryl
    2 x Athlon MP 1900 * MSI K7D Master-L * 1024 MB ECC DDR333
    Hercules 9800XT 256 MB Ram * 1x 250 GB IDE
    Wasserkühlung