Java-Dateien werden nicht erkannt (wichtig, Projekt!)

    • Original von Squall
      Uns wurde auf der Uni empfohlen, jEdit zu verwenden, da viele IDEs eigene Dinge drehen; was du bei einem normalen Editor schreibst, ist in der Datei, was du nicht schreibst, eben nicht.

      Sofern du nicht vor hast, dich weiter mit Java zu beschäftigen, würde ich einfach die Kommandozeile verwenden, anstatt den Rechner mit den verschiedensten Editoren und IDEs vollzumüllen. Wenn du dein Demo-Programm dann auch so präsentierst, wirkt es auch etwas professioneller, da du schrittweise das machst, was bei einem GUI hinter einem Button oder Menüeintrag versteckt ist - außerdem siehts einfach... cooler aus. ;)

      Aber wie soll dieser Vortrag generell ablaufen? Aus welchem Themengebiet sind die deiner Kollegen?



      Naja, wir haben uns alle eine andere Programmiersprache rausgesucht und jeder soll seine dann dem Rest der Klasse vorstellen.
      Ich glaub ausser mir gibts noch JavaScript, php, C++, Ruby und Valla.
      Wir sollen einen kleinen geschichtlichen Exkurs machen (hab ich schon), ich hab auch erklärt wie das mit der Java-Vm u.s.w. klappt.
      Also wir sollten einen Grundeindruck von unserer Programmiersprache vermitteln.
      Was mir jetzt eben noch fehlt sind die Beispielprogramme (Hallo Welt ist ja relativ einfach, den Quelltext dazu findet man im Netz) und mir fehlt noch ein Programm wo man irgendwas eintragen muss und es dann antwortet (sowas wie z.b. Wie alt bist du? Dann kann man was eingeben und das Programm sagt dir dann, ob du dir schon Zigaretten kaufen kannst oder nicht)
      Letztendlich liegt mein größtes Problem aber einfach in den Programmen, da ich nicht vernünftig weiterkomme und wahrscheinlich schon daran scheitere, Hallo Welt zu erklären.
    • Original von Shiek Meister
      Was mir jetzt eben noch fehlt sind die Beispielprogramme (Hallo Welt ist ja relativ einfach, den Quelltext dazu findet man im Netz) und mir fehlt noch ein Programm wo man irgendwas eintragen muss und es dann antwortet (sowas wie z.b. Wie alt bist du? Dann kann man was eingeben und das Programm sagt dir dann, ob du dir schon Zigaretten kaufen kannst oder nicht)

      Ein kleines Programm mit einer ähnlichen Funktionsweise habe ich neulich geschrieben; da geht es darum zu erfahren, ob man mit einer bestimmten Note eine Prüfung bestanden hat oder eben nicht.

      So sieht das aus (falls es dich interessiert):

      Java-Quellcode

      1. import java.util.Scanner;
      2. public class PruefungBestanden {
      3. public static boolean bestanden(double note) {
      4. return note <= 4.0;
      5. }
      6. public static void main(String[] args) throws Exception {
      7. Scanner s = new Scanner(System.in);
      8. System.out.println("Bitte gib eine Note ein (in der Form 'x,y').");
      9. //Es ist wichtig, die Zahl mit Komma einzugeben, da das ganze deutsch
      10. //lokalisiert ist. Punkt wird nicht funktionieren.
      11. double note = s.nextDouble();
      12. boolean x = bestanden(note);
      13. if(x) System.out.println("Herzlichen Glueckwunsch, Du hast bestanden!");
      14. else {
      15. System.out.print("Du hast leider nicht bestanden. ");
      16. System.out.println("Vielleicht solltest du haerter arbeiten?");
      17. }
      18. }
      19. }
      Alles anzeigen


      Du kopierst es in eine Textdatei, die du PruefungBestanden.java nennst, und kompilierst es dann in der Konsole. Kompiliert und ausgeführt sieht das dann so aus (das ganze bezieht sich im übrigen auf Uni-Noten):

      Quellcode

      1. kaktus@ubuntu:~$ javac PruefungBestanden.java
      2. kaktus@ubuntu:~$ java PruefungBestanden
      3. Bitte gib eine Note ein (in der Form 'x,y').
      4. 2,3
      5. Herzlichen Glueckwunsch, Du hast bestanden!


      Ist das so nach deiner Vorstellung?
    • Indeed.
      Ich hab sogar nen großteil davon verstanden, was mich sehr gefreut hat, ich werds auf jeden Fall mal ein wenig bearbeiten und vereinfachen, um da durchzublicken. Auch wenn ich da nicht sehr zuverlässig bin, wir sollens ja auch selbst erklären können xD

      Njoah, mein größtes Problem sind wahrscheinlich die Erklärung, wie das genau mit den verschiedenen Java-Klassen funktioniert, da ich im Internet nicht wirklich auf eine Erklärung stoße, die mir nicht ein wenig zu hoch ist (im Grundbau versteht mans ja, aber ich muss es ja auch einem Publikum erklären >,<)

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Shiek Meister ()

    • Original von Shiek Meister
      Njoah, mein größtes Problem sind wahrscheinlich die Erklärung, wie das genau mit den verschiedenen Java-Klassen funktioniert, da ich im Internet nicht wirklich auf eine Erklärung stoße, die mir nicht ein wenig zu hoch ist (im Grundbau versteht mans ja, aber ich muss es ja auch einem Publikum erklären >,<)


      Das hier dürfte helfen:
      de.wikipedia.org/wiki/Objektorientierte_Programmierung
      James
      [Blockierte Grafik: http://dl.dropbox.com/u/24753690/stuff/forenlinks/rocketsign.png]
      Team Rocket - so schnell wie das Licht,
      gebt lieber auf und bekämpft uns nicht!

      join #teamrocket @iz-smart.net
    • Das mit den Klassen ist jetzt auch fertig, ich müsst jetzt nurnoch ein einfaches Programm schrieben, in dem man eine Eingabe tätigen muss und dafür eine Ausgabe bekommt.

      Ich hatt es mir so gedacht

      Programm: " Wie alt bist du?"
      Eingabe: " irgendeine Zahl"
      Programm: Wenn Zahl <18, dann " Du darfst noch kein Auto fahren" wenn Zahl >= 18, dann " Du darfst Auto fahren"

      Wenn ich das hab hab ich alles was ich brauche und ich kriegs alleine nicht hin. In den Guides im Nets steht irgendwas von .io Dateien, och damit kann ich nicht wirklich was anfangen


      EDIT: Ich hab übrigens auch veruscht, etwas auf Basis von Kaktustussis Programm zu machen (also dieses umzuschreiben)
      Nur leider funktioniert das bei mir nicht wirklich, da ich es wie gesagt nicht verstehe und ich ja auch eher was wirklich einfaches brauche, was auch der Rest der KLasse, der bisher ganrichts mit Java zu tun hatte, versteht

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Shiek Meister ()

    • Argh, du hast mich gezwungen zu posten, jetzt ist meine schöne geekige Beitragsanzahl von 1.024 weeeeg ;___;

      Java-Quellcode

      1. import java.util.Scanner;
      2. public class Altersabfrage {
      3. public static boolean volljaehrig(int alter) {
      4. return alter >= 18;
      5. }
      6. public static void main(String[] args) throws Exception {
      7. Scanner s = new Scanner(System.in);
      8. System.out.println("Wie alt bist du?");
      9. int alter = s.nextInt();
      10. boolean x = volljaehrig(alter);
      11. if(x) {
      12. System.out.print("Du bist volljaehrig und darfst an allen Sauereien");
      13. System.out.println(" des Lebens teilnehmen >:D");
      14. }
      15. else {
      16. System.out.print("Du musst dich leider noch etwas gedulden, bis du");
      17. System.out.println(" am wahren Leben teilhaben darfst :P");
      18. }
      19. }
      20. }
      Alles anzeigen


      Vergleich die beiden Codes mal - ich musste echt kaum was ändern.
    • Okay, du bist jetzt kein Gigabyte mehr, aber ist das nicht ein Ansporn auf die Terrabytegrenze zuzuarbeiten? :P

      Schon klar, ich blick nur nicht so ganz durch manche Befehle durch, z.b. Scanner. Ich glaub daran ist auch die Kompilierung von dem Uninotenprogramm gescheitert^^

      Was ich nicht verstehe:

      "import java.util.Scanner;"

      Irgendwas wird da importiert, schon klar.
      Ist es so was ähnliches wie dieses java.io oder versteh ich garnix mehr? XD


      "throws Exception {"

      Das einzige, was ich verstehe, ist die Klammer


      "int alter = s.nextInt();"

      int alter ist klar, ist s.next int() das was den Beutzer das alter eingeben lässt?

      "Scanner s = new Scanner(System.in);"

      Hat sicher was damit zu tun, aber hier gilt das gleiche wie immer.




      Tut mir Leid, dass ich so viele Fragen stelle. Das Problem ist eben, dass wir uns bsiher im Informatikunterricht kaum mit Java beschäftigt haben und nun jeder über das Wochenende eine Programmiersprache bearbeiten soll.
      Ich hab vorher nur aus Interesse mit dem Java-Hamster-Simulator gearbeitet und kann deshalb mit manchen Befehlen des echten Javas nichts anfangen, tut mir Leid. :(

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Shiek Meister ()

    • Dass dieses Programm überhaupt so steht, wie es hier steht, und noch dazu funktioniert, habe ich Ark zu verdanken :knuddel: - ich bin nämlich selbst auch noch totaler Programmieranfänger (und lerne btw auch mit dem Java-Hamster-Modell ^^). Folglich kann ich dir auch nicht mit hunderprozentiger Sicherheit erklären, was das alles genau ist und was es bewirkt, aber ich versuche es mal.

      Das "import java.util.Scanner;" bewirkt, dass die Klasse Scanner aus der Java-Bibliothek in diesem Programm verwendet werden kann. In Zeile 10 wird ein neues Objekt namens s aus dieser Klasse erzeugt, das fortan dazu dient, die Zahlen einzulesen (deshalb "System.in"). Der Befehl "s.nextInt();" in Zeile 12 veranlasst Objekt s, die eingegebene Zahl (welche vom Typ Integer, also Ganzzahl, ist) einzulesen. Diese Zahl wird dann der Variablen alter zugewiesen. (Ich hoffe, das war jetzt nicht ganz falsch)
      Und das mit der Exception weiß ich nicht ^^'
    • Original von Shiek Meister
      Schon klar, ich blick nur nicht so ganz durch manche Befehle durch, z.b. Scanner.

      Kaum etwas von dem, was du in einem Java-Quelltext findest, sind Befehle. ;)

      Original von Shiek Meister
      "import java.util.Scanner;"

      Irgendwas wird da importiert, schon klar.
      Ist es so was ähnliches wie dieses java.io oder versteh ich garnix mehr? XD

      Man soll es kaum glauben, aber es wird hier nichts importiert in dem Sinne. Diese Zeile ist lediglich ein Hinweis für den Compiler zwecks Vereinfachung des Quellcodes: Ohne dieses import müsstest du an jeder entsprechenden Stelle "java.util.Scanner" schreiben. Mit diesem import weiß dann aber der Compiler, dass du jedes Mal, wenn du "Scanner" schreibst, tatsächlich "java.util.Scanner" meinst. Dieses import-Dingens dient also zur Vereinfachung des Quelltextes.

      Dazu muss man wissen, dass Java-Klassen in so genannten Paketen organisiert sind, die eine Hierarchie ausbilden und im Dateisystem über Ordnerstrukturen abgebildet werden. Über die CLASSPATH-Variable weiß der Compiler, wo im Dateisystem er nach Klassen suchen muss. Steht dort beispielsweise "/ein/ordner/irgendwo" (<-- So könnte eine Pfadangabe unter unixoiden Systemen aussehen. Entsprechende Angaben unter Windows kannst du dir hier auch vorstellen.) und bekommt dann ein "import java.util.Scanner" vorgesetzt, dann sucht der Compiler nach der Datei "/ein/ordner/irgendwo/java/util/Scanner.class" und weiß dann ganz genau, von welcher Klasse du sprichst, wenn du irgendwo nachfolgend im Quelltext "Scanner" schreibst.

      Dieser java.util.Scanner selbst ist eine Klasse der Java-SE-API. (SE = Standard Edition; API = Application Programming Interface; API ist kein Java-spezifischer Begriff.) Diese API (andere sagen das API, jedem das Seine ^^) stellt sehr viele Klassen für Standardaufgaben bereit, die man sonst immer wieder neu erfinden müsste. Dazu gehört z.B. neben der Klasse java.util.Scanner auch die Klasse java.lang.System, die eine wichtige Schnittstelle zum umgebenden System bietet. (Im Quellcode reicht es, wenn du nur "System" schreibst, weil alle Klassen im Paket java.lang immer als "importiert" gelten. Du kannst dir also vorstellen, am Anfang jedes Java-Quelltextes würde "import java.lang.*;" stehen.) Die Online-Dokumentation zur SE-API ist hier einzusehen. Du kannst dort z.B. oben links auf "java.util" klicken und dann im Frame darunter auf "Scanner", dann erscheint im großen Frame rechts die Dokumentation von java.util.Scanner, wo auch beschrieben ist, was nextInt() macht. Genauso kannst du z.B. mit java.lang.System vorgehen.

      System.in ist die Java-interne Abbildung des so genannten Standard-Eingabestroms (abermals kein Java-spezifischer Begriff!), der normalerweise jedem Programm zur Verfügung gestellt wird. (Okay, unter Windows funktioniert das zwar nicht ganz so richtig mit allen Programmen, aber da muss man wohl M$ fragen. :rolleyes: ) Wenn man weiter nichts macht (also beim Start des Programms), liest der Standard-Eingabestrom von der Tastatur. Die Kurzfassung also: normalerweise kommen über System.in die Zeichen ins Programm, die man über die Tastatur eingibt.

      Entsprechend zum Standard-Eingabestrom gibt es noch einen Standard-Ausgabestrom (in Java: System.out) und den Standard-Fehlerausgabestrom (in Java: System.err). Beide geben ihre Zeichen normalerweise in die Konsole aus, können aber auch einzeln umgelenkt werden. (Zumindest unter unixoiden Systemen funktioniert das; unter Windows ist so was mal wieder nur Quark. :rolleyes: )

      So, nun zum Scanner: java.util.Scanner ist ein so genannter lexikalischer Scanner (wieder kein Java-spezifischer Begriff! Für mehr Details bitte die Wikipedia befragen.). Bei der Konstruktion eines Scanners muss angegeben werden, was der Scanner als Eingabe lesen soll:

      Quellcode

      1. Scanner s = new Scanner(System.in);

      Diese Zeile erzeugt einen Scanner s, der System.in als Eingabe bekommt. Mit dem späteren

      Quellcode

      1. s.nextInt()
      wird eben dieser gerade erzeugte Scanner s dazu angewiesen, die nächsten Zeichen, die er aus der Eingabe lesen kann, als Ganzzahl aufzufassen und diese zurückzugeben. Scheitert der Scanner daran (z.B., weil Buchstaben und eben keine Zahl eingegeben wurden), dann wirft er eine java.util.InputMismatchException. Das kannst du auch ausprobieren!

      Original von Shiek Meister
      "throws Exception {"

      Dieses "throws Exception" kannst du an der Stelle weglassen. Warum das so ist, erkläre ich mal hier nicht, das führt sonst zu weit. ^^ Es hat aber was mit diesen Exceptions zu tun, von denen die eben genannte InputMismatchException auch eine ist.

      Ich hoffe, das hilft (und ist nicht zu umfangreich gewesen :D).

      Ark
    • Danke euch!
      Ich habs nun in etwa verstanden und weiß, wie ich das Programm zu erklären hab.
      Und ja Ark, ich kann damit was anfangen!
      Vielen Dank an euch, wenns interessierteditier ich morgen hier rein wie der Vortrag gelaufen ist.



      EDIT: @Unten: Poste ich noch, ich hab bisher noch keine Ergebnisse bekommen weil die Vorträge nach hinten verschoben wurden, da jetzt sehr viele Stunden ausfielen weil unser Lehrer sehr lang krank war

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Shiek Meister ()

    • Der Vortrag wurde erfolgreich gehalten und ich hab eine 2+ : D

      EDIT: Leute, ich brauch nochmal schnell eine kleine Erklärung, wir schreiben nähmlich am Donnerstag eine Kursarbeit:

      Kann mir jemand genau erklären was Objekte sind, bzw was objektorientiert bedeutet, und das möglichst einfach?
      Unser Lehrer hat nähmlich oft erklärt, das alle Datentypen und Variablen in bestimmten Prpgerammiersprachen Objekte seien, und ich kann mir den UNterschied zwischen nem Objekt und normalen Variablen nicht zusammenreimen.

      Ich müsste auch evtl die Datentypen Object und Array erklären und versteh den Sinn dahinter nicht.
      ( Ich meine, sämtliiche Arten der Eingebe sind doch durch die anderen Datentypen schon abgedeckt: Ganze Zahlen/Integer, Kommazahlen/Double, Ja-Nein/Boolean, Beliebige Zeichenfolge/String)

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Shiek Meister ()

    • Okay, ich hab nicht so ganz die Ahnung davon, aber ich würd's mal so erklären:

      Primitive ("einfache") Datentypen sind z.B. int, double, boolean - ich nenne sie jetzt mal Schubladen. Ein "komplexer" Datentyp hingegen, also ein Objekt, ist ein Schrank - und dieser Schrank kann Schubladen beinhalten. Wenn du eine Klasse schreibst (also den Bauplan des Schranks), kannst du nach Belieben Schubladen hinzufügen oder entfernen. Angenommen du hast eine Klasse Tier, dann kannst du ihr Instanzvariablen wie int hunger, boolean isAlive oder Methoden wie void herumlaufen() geben oder auch wieder wegnehmen. Wichtig dabei ist noch, dass dein Schrank wiederum in einem größeren Schrank stehen kann :D Hat deine Klasse Tier (bzw. ein Objekt bla, welches du aus der Klasse erschaffst) bspw. etwas wie String name, dann hast du mit dem String ein Objekt vor dir, welches sich wiederum in einem anderen, übergeordneten Objekt befindet.
    • Versteh ich das richtig:

      Ihr lernt Java, lernt aber nicht die objektorientierte Programmierung? oO

      willemer.de/informatik/java/javaclas.htm
      Das heir dürfte dir weiter helfen. Kurz und prägnant. Weiß nicht ob es auch für einen Anfänger verständlich ist
      James
      [Blockierte Grafik: http://dl.dropbox.com/u/24753690/stuff/forenlinks/rocketsign.png]
      Team Rocket - so schnell wie das Licht,
      gebt lieber auf und bekämpft uns nicht!

      join #teamrocket @iz-smart.net
    • @Kaktustussi: Danke, cih habs in etwa verstanden, nur ich bräucht ne Art einfache Definition für morgen. Aber danke, ich denke das kann mir schon sehr helfen : )

      @Stan:
      Njoah, in unsrem Infokurs wurden bestimmte Schülker bestimmten Programmiersprachen zugeteilt und mussten sich alles selbst aneignen
    • Ich finde mit Tieren lässt sich ein Objekt am besten beschreiben

      "Hamster" ist der Typ
      Der Hamster hat gewisse Eigenschaften (zB Name), dass sind die sogenannten Membervariablen. Ein Objekt ist (wie Squall schon gesagt hat) ist eine Instanz des Typs. Also wenn du zwei Hamster hast sind es zwar zwei verschiedene Lebewesen aber sind doch beide Hamster.
      Ein Hamster kann auch noch zum Beispiel fressen. Da programmierst du die Methoden aus. Zum beispiel eat(). Diese Methoden werden auf das Objekt aufgerufen.
      Das heißt wenn du zwei Hamster hast (hamster1 und hamster2) und jeder Hamster hat eine boolean Variable (zum beispiel isHungry) als Eigenschaft, die beim Aufruf von eat() auf false gesetzt wird, wird es nur auf einen der beiden hamster angewandt

      das heißt wenn du schreibst: hamster1.eat(); dann ist hamster1 nicht mehr Hungrig aber hamster2 schon
      James
      [Blockierte Grafik: http://dl.dropbox.com/u/24753690/stuff/forenlinks/rocketsign.png]
      Team Rocket - so schnell wie das Licht,
      gebt lieber auf und bekämpft uns nicht!

      join #teamrocket @iz-smart.net