You are not logged in.

  • Login

1

Saturday, April 21st 2007, 12:48pm

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?

2

Saturday, April 21st 2007, 2:00pm

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.

3

Saturday, April 21st 2007, 2:13pm

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.

4

Saturday, April 21st 2007, 2:41pm

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:

Java Quellcode

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


und dann wollte ich noch so 5 vokabeln festlegen, allerdings fehlt mir hier auch das nötige wissen :-/

5

Monday, April 23rd 2007, 3:12pm

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.

Java Quellcode

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


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.

6

Monday, April 23rd 2007, 6:14pm

danke, aber sie hat nichts gegen die switch lösung, sondern sie will das, was bei case 1 steht, als methode geschrieben haben...und dann halt daa auf die methode zugreifen

7

Monday, April 23rd 2007, 6:24pm

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.

Java Quellcode

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

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.)

Java Quellcode

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

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:

Java Quellcode

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

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:

Java 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

8

Monday, April 23rd 2007, 6:48pm

danke, aber ich muss schon verstehen was ich schreibe... und ich kann auch nicht unbedingt sachen mit reinnehmen, die wir noch nicht hatten, wie z.b. das mit den listen oder private methoden...

und ich soll es mit nem feld machen, und nicht mit ner datei...

9

Tuesday, April 24th 2007, 8:29am

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:

Java Quellcode

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

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

Similar threads

Social bookmarks