wie oop an diesem beispiel verbessern?

P

pask

Gast
hallo,

ich lerne gerade java und speziell objektorientierte programmierung
zur übung habe ich eine bruchklasse geschrieben, welche einen bruch darstellt, den größten gemeinsamen teiler berechnet und sich kürzen kann:

Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Bruch
{
  // Attribute
  private int zaehler, nenner, i, ggT, kzaehler, knenner;

  // Methoden
  public void setZaehler(int zaehler) // Paramaterübergabe aus BruchMain/Read
  {
    if (zaehler >= 0)
    {
      this.zaehler = zaehler; // Parameterwert wird an Attribut "zaehler" übergeben
    }
    else
    {
      System.out.println("Keine negativen Zahlen moeglich!");
      System.exit(0);
    }
  }

  public void setNenner(int parameter)
  {
    if (parameter >= 0)
    {
      this.nenner = parameter;
    }
    else
    {
      System.out.println("Keine negativen Zahlen moeglich!");
      System.exit(0);
    }
  }

  public int getZaehler()
  {
    return this.zaehler;
  }

  public int getNenner()
  {
    return this.nenner;
  }

  public int ggT()
  {
    // Vergleich der Teilermengen
    for (this.i = 1; this.i <= this.zaehler; this.i++)
    {
      if ((this.zaehler % this.i == 0) && (this.nenner % this.i == 0))
      {
        this.ggT = this.i;
      }
    }
    return this.ggT;
  }

  public void kuerzen()
  {
    if (this.ggT == 1 || this.zaehler == 0 || this.nenner == 0)
    {
      System.out.println("Der Bruch ist nicht kuerzbar!");
    }
    else
    {
      this.kzaehler = this.zaehler / this.ggT;
      this.knenner = this.nenner / this.ggT;
    }
  }

  public int getkZahler()
  {
    return this.kzaehler;
  }

  public int getKNenner()
  {
    return this.knenner;
  }
}


und hier eine 2. klasse, welche diese bruchklasse verwendet, hat ein paar hilfsmethoden zum einlesen der zähler und nenner und verwendet diese.

Java:
public class BruchMain
{
  static BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
  String                s     = "";

  private static int readZaehler() throws IOException
  {
    System.out.print("Zaehler eingeben: ");
    return Integer.parseInt(input.readLine());
  }

  private static int readNenner() throws IOException
  {
    System.out.print("Nenner eingeben: ");
    return Integer.parseInt(input.readLine());
  }

  public static void main(String[] args) throws IOException
  {
    char repeat = 0;
    String s = "";
    do
    {
      Bruch br = new Bruch();
      br.setZaehler(readZaehler());
      br.setNenner(readNenner());
      br.ggT();
      br.kuerzen();
      System.out.println("Der groeßte gemeinsame Teiler von " + br.getZaehler() + "/"
          + br.getNenner() + " ist: " + br.ggT());
      System.out.println("Bruch in gekuerzter Form: " + br.getkZahler() + "/" + br.getKNenner());

      System.out.print("Erneut einen Bruch eingeben? (Wiederholen mit 'j' oder 'J'): ");
      s = input.readLine();
      repeat = s.charAt(0);
    } while (repeat == 'j' || repeat == 'J');
  }
}


meine frage:
ist das so schon objektorientierte programmierung oder wie kann ich das verbessern?

MfG. =)
 

Final_Striker

Top Contributor
Allgemein:
-es gibt auch negative Brüche
-der Nenner eines Bruchs darf nicht 0 werden

ist das so schon objektorientierte programmierung oder wie kann ich das verbessern?

- kein System.exit(0) verwenden, Stichwort: Exception Handling
- Gültigkeitsbereich der Variablen so klein wie nötig halten. Du verwendest die Variable i nur in der ggT-Methode, warum dann als Instanzvariable deklarieren?
-
 

Wildcard

Top Contributor
Bei Objektorientierung geht es primär um die Kommunikation zwischen Objekten. Du hast genau 1 Objekt insofern ist es schwierg dabei schon von objektorientierter Programmierung zu sprechen.
Die Grundidee einen Bruch als Objekt zu verstehen und mit Methoden zu versehen um auf dem Bruch zu operieren ist allerdings objektorientiert, insofern passt das.
Ein paar handwerkliche Fehler sind noch drin, der Bruch sollte keine System.out.println's verwenden und ganz besonders nicht System.exit aufrufen, aber darum ging es dir vermutlich nicht.
Der Bruch könnte allerdings zB bei kürzen einen neuen Bruch zurückliefern anstatt sich selbst zu verändern.
Wenn du die Sache weiter treiben willst kannst du zum Beispiel ein Interface Operand definieren das Bruch und zB Zahl implementiert.
Als nächstes ein Interface Operator das du zB durch einen Add, Substract,... Operator implementierst.
Wenn du soweit bist kannst du die Einzelteile miteinander kommunizieren lassen und somit Bruchrechnen.
 

Woodstock

Mitglied
Hallo,

bevor man einen Bruch kürzen will, muss man "per Hand" vorher die ggT-Methode anschmeißen. Das ist nicht so optimal. Also entweder der ggT verändert sich automatisch, wenn sich der Bruch ändert, oder der ggT wird in der kürzen-Methode errechnet.

Deine Bruch-Klasse hat auch nur den Standardkonstruktor. Ein weiterer Konstruktor könnte so aussehen:

Java:
public Bruch(int zaehler, int nenner){
  if(nenner==0) {
    throw new IllegalArgumentException("Nenner darf nicht 0 sein!");
  }
  this.zaehler=zaehler;
  this.nenner=nenner;
}

Oder ein Konstruktor für ganze Zahlen:

Java:
public Bruch(int zaehler) {
  this(zaehler, 1);
}

Da du den Bruch auch mal ausgeben willst, wäre eine toString()-Methode auch schön:
Java:
String toString() {
  return zaehler + " / " + nenner;
}
 
Zuletzt bearbeitet:
P

pask

Gast
Hi, vielen Dank für die sehr schnellen Antworten :)
Aus welchem Grund sollte kein System.exit und System.Print in der Bruch.java stehen? Was kann ich mit der toString-Methode genau anfangen, welchen Nutzen hat sie?
Würde es Sinn machen das Programm mit der Möglichkeit zu erweitern einen zweiten Bruch einzugeben, damit diese miteinander addiert, subtrahiert, multipliziert oder dividiert werden können? (Damit mehr als ein Objekt vorhanden ist)

MfG

pask
 

Woodstock

Mitglied
Hallo,

Was kann ich mit der toString-Methode genau anfangen, welchen Nutzen hat sie?

Damit du nicht sowas schreiben musst:
Java:
System.out.println("Bruch in gekuerzter Form: " + br.getkZahler() + "/" + br.getKNenner());
sondern
Java:
System.out.println("Bruch in gekürzter Form: " + br.toString());

Würde es Sinn machen das Programm mit der Möglichkeit zu erweitern...

Das kannst nur du wissen... ;-)
 

timbeau

Gesperrter Benutzer
Ich finde Mathematisches eignet sich nur bedingt als Beispiel für OO-Programmierung.

Gibts nichts anderes, dass dich interessiert?
Was wäre z.B. bestimmte Dateien zu suchen auf dem eigenen Rechner? Da gibts bestimmt einige Möglichkeiten wo man nette Objekte designen kann.
 
P

pask

Gast
@ timbeau
du hast bzgl. meines beispiels natürlich recht, ist sehr theoretisch. dein vorschlag klingt äußerst interessant, könntest du das genauer erläutern? ein programm, welches ich später auch in die gui bringen könnte wäre optimal, deshalb auch mein ansatz als kleiner "rechner"

mfg
 

Ark

Top Contributor
Aus welchem Grund sollte kein System.exit und System.Print in der Bruch.java stehen?
Zu System.exit(): Stell dir einmal vor, du würdest eine größere Anwendung mit GUI usw. bauen. Fändest du es etwa toll, wenn du nichtsahnend irgendwo zwei Werte eingibst, das Programm dann aus diesen die negative Differenz ermittelt und sie an deine Setter weiterleitet, woraufhin plötzlich dein Programm sich einfach abschaltet? Anderes Beispiel: Geht dein Taschenrechner auch einfach aus, wenn du da die Wurzel aus -2 ziehst? ;)

Zu System.out.println(): System.out ist für Ausgaben auf den Standard-Ausgabestrom zuständig. Dieser dient dazu, dem Nutzer Ausgaben des Programms zu präsentieren oder diese Ausgaben gehen als Eingaben in ein nächstes Programm. Und eine Fehlermeldung ist keine normale Programmausgabe.

Wenn Programm A Zahlen über System.out ausgibt, kann es sein, dass diese Zahlen von einem Programm B über System.in eingelesen und weiterverarbeitet werden. Was soll denn dann bitte Programm B mit deiner Fehlermeldung machen? Für B sieht es wie eine ganz normale Programmausgabe aus, es erkennt nicht, dass es sich um einen Fehler handelt. Unter anderem deswegen gibt es einen Standard-Fehlerstrom (oder heißt es Standard-Fehlerausgabestrom?), in Java unter System.err erreichbar. Wenn du also schon Fehlermeldungen mitzuteilen hast, dann über System.err.

Das generellere Problem bei System.out ist in deinem Fall aber, dass der Aufrufer des Setters gar nicht mitbekommt, dass etwas schiefgelaufen ist: Wenn du in deinem Code die System.exit()-Aufrufe entfernst, entsteht u.U. einfach ein unbrauchbares, fehlerhaftes Bruch-Objekt, und niemand merkt es. Auch deine Fehlermeldungen helfen da nicht. Was man an der Stelle benötigt, sind Exceptions (=Ausnahmen).

Der Umgang mit Ausnahmen ist in Java der normale Weg, um programmintern Fehler bzw. Probleme zu melden. (Das heißt jetzt aber nicht, dass du überall so viele Ausnahmen wie möglich werfen solltest: Ausnahmen sollten Ausnahmen bleiben können. Ausnahmebehandlungsroutinen schreibt man immer in der Hoffnung, dass sie niemals notwendig werden.)

BTW: Wenn du schon System.exit() verwenden möchtest, dann nicht innerhalb der Methoden eines komplexen Datentyps*, sondern eher "in der Nähe der main()-Methode", und im Fehlerfall besser System.exit(1) aufrufen, da System.exit(0) anderen Programmen zu verstehen gibt, dass alles okay wäre.

*: Die Klasse Bruch schreibst du ja nur, weil Java so etwas selbst nicht mitliefert. Mitgelieferte Datentypen wie z.B. int haben auch keine Operation, die einfach so die komplette JVM runterfahren lassen. Wenn es also Probleme gibt, dann über Exceptions melden. Das passiert z.B. ganz natürlich, wenn du zwei int-Werte dividierst, wobei der zweite 0 ist: Es kommt zu einer ArithmeticException, und nicht etwa, wie bei dir, zu einer Notabschaltung der ganzen Maschine. ;)

Ark
 

Landei

Top Contributor
Der Bruch könnte allerdings zB bei kürzen einen neuen Bruch zurückliefern anstatt sich selbst zu verändern.

Das kann ich nur unterschreiben. Solche "Werte-Typen" wie Brüche, komplexe Zahlen u.s.w. sollten unbedingt unveränderlich sein. Sind sie es nicht (wie z.B. java.util.Date), hat man nur Scherereien. Das Grundproblem ist folgendes:

Java:
Bruch b = new Bruch(10,11);
irgendEineMethode(b);
//hat b jetzt noch denselben Wert?

Nachdem wir b an irgendEineMethode übergeben haben, wissen wir nicht, ob diese Methode b geändert hat. Die Methode könnte sogar einen Thread starten, der b erst in fünf Minuten ändert. Irgendwelcher anderer Code, der b verwendet, guckt dann ziemlich dumm aus der Wäsche. Da wir das nicht verhindern können, müssten wir irgendEineMethode eine Kopie von b übergeben, um wirklich vor solchen Veränderungen sicher zu sein. Aber nicht nur wenn wir einen Wert weggeben, sondern auch wenn wir einen Wert übergeben bekommen, müssten wir diesen kopieren, weil der Code wo b herkommt, b auch wieder jederzeit wieder ändern könnte. In Fällen wie [c]java.util.Date[/c] hat dieses Verhalten schon zu unzählichen Bugs geführt.

Also: Solche Klassen immer unveränderlich machen. Die einzige gute Ausrede, das nicht zu tun, ist Performance, aber nur wenn es um das allerletzte Quentchen Speed geht, wie etwa bei 3D-Grafik. Im "Normalbetrieb" ist der zusätzliche Aufwand für die Erstellung solcher kleinen Objekte wie Bruch wirklich vernachlässigbar (auch weil die JVM solchen Code inzwischen extrem gut optimiert).
 
Zuletzt bearbeitet:
P

Pask

Gast
Hi, erstmal vielen Dank für eure zahlreichen Posts (Wirklich super Forum!). Aus Zeitgründen schaffe ich es im Moment jedoch nicht täglich zu posten. Ich werde in den nächsten Tagen das Bruchprogramm weiter entwickeln und mit Hilfe eurer Vorschläge verbessern. Anschließend lade ich den neuen Quelltext hoch, damit dann wieder darüber fleißig diskutiert werden kann. (Hoffentlich ist der Thread auch ein gutes Beispiel für andere Anfänger) Ich wünsche euch noch einen schönen Abend.

MfG

Pask
 

Andi_CH

Top Contributor
Also: Solche Klassen immer unveränderlich machen.

Ich kann den Gedanken zwar einigermassen nachvollziehen, aber dann darf es keine set-Methoden sondern nur Konstruktoren geben und jede andere Methode liefert return Werte.
Einen Wert setzten hiesse also erst alle anderen Werte lesen und ein neues Objekt mit den alten und dem neuen Wert erstellen.

Meinst du das wirklich so?

Ist aber ein sehr ungewohnter Ansatz, muss ich sagen.
Ich hab bis jetzt eigentlich in jedem Projekt datenlastige Klassen gefunden die herumgereicht wurden oder mehr oder weniger global zur Verfügung standen und irgendwie müssen darin doch Daten verändert werden - das ist ja schliesslich das Ziel eines Programmes
 

timbeau

Gesperrter Benutzer
Ich denke der Unterschied ist

Java:
Object b
machMitWertXYZvonObjectbIrgendwas(b);

vs.

Java:
Object b
b.setWertXYZ(rechne());
 
M

maki

Gast
Immutable object - Wikipedia, the free encyclopedia

Strings und viele andere Objekte sind sogenannte Immutables, d.h. ihr Wert ist unveränderbar, vermeidet u.a. Aliasing Probleme und sorgt für mehr Klarheit.
Getter & Setter ist eher etwas für JavaBeans, die sind genau das Gegenteil von Immutables ;)

Man kann nicht alles zum Immutable machen, Entities (JPA) zB. sind nicht dafür geeignet, genrell gesagt, kann man "Value Objects" (also Objekte, die nur durch ihren Wert identifizierbar sind, wie zB. Strings, Integer, etc. pp.) zu immutables machen.

Nachtrag: Für Interessierte, Joshua Bloch geht auf Immutables und viele andere Dinge in seinem Buch "Effective Java 2nd Edition" ein.
 
Zuletzt bearbeitet von einem Moderator:

Landei

Top Contributor
Ich kann den Gedanken zwar einigermassen nachvollziehen, aber dann darf es keine set-Methoden sondern nur Konstruktoren geben und jede andere Methode liefert return Werte.
Einen Wert setzten hiesse also erst alle anderen Werte lesen und ein neues Objekt mit den alten und dem neuen Wert erstellen.

Meinst du das wirklich so?
Ja.

Ist aber ein sehr ungewohnter Ansatz, muss ich sagen.
Ich hab bis jetzt eigentlich in jedem Projekt datenlastige Klassen gefunden die herumgereicht wurden oder mehr oder weniger global zur Verfügung standen und irgendwie müssen darin doch Daten verändert werden - das ist ja schliesslich das Ziel eines Programmes

String, Integer, Double, enums u.s.w. würde ich nicht unbedingt als "ungewohnt" bezeichnen. Bei komplexeren Typen stellt sich natürlich die Frage der "Bequemlichkeit" - ich würde jetzt nicht unbedingt einen ganzen Graphen immutable machen, aber der ist ja auch weniger ein typischer "Wertetyp". Was man machen kann, ist z.B. unveränderliche Collections verwenden (siehe z.B. Functional Java oder pcollections - Project Hosting on Google Code ). Die Probleme, die bei mutablen Wertedatentypen entstehen, kann man am Beispiel java.util.Date gut sehen ( Using java.util.Date safely at Mark Needham Why is the Java date API (java.util.Date, .Calendar) such a mess? - Stack Overflow ...)
 
Zuletzt bearbeitet:

Andi_CH

Top Contributor
String, Integer, Double, enums u.s.w. würde ich nicht unbedingt als "ungewohnt" bezeichnen.

Es ist die Frage was man sich gewohnt ist - Daten sind für mich halt Variablen und die sind nun mal variabel weil sie sonst Konstanten heissen würden und was variabel ist wird auch im Laufe des Prozesses verändert, denn sonst müsste ich den Prozess ja gar nicht ausführen.
Einfach ein neues Objekt allozieren und füllen hat auch sein Tücken - da halte ich mir die Referenz auf ein Objekt das mir immer die aktuellsten Daten liefern soll (es gibt immer Gründe warum ich beim Datenlieferanten nicht direkt anfragen darf) und da legt einfach irgend einer ein neues Objekt an - nicht das was ich wollte.

enums sind keine Klasse sondern Sammlungen von Konstanten und wurden in Java mangels etwas anderem als etwas klassenähnliches implementiert. (Steht ja auch nicht class sondern eben enum davor)

Die Wrapperklassen sind aber eben etwas ganz spezielles.
Java:
	Integer meinInteger = 5;
	meinInteger = 3;
Ich möchte selbst eine Klasse schreiben die sich so verhält - das ist in Java IMO nicht möglich, da es kein Operatoroverloading gibt -> Integer und Double sind also auch Ausnahmen.
Das sehe ich eher als Notbehelf um z.B. Container nutzen zu können welche nur mit Objecten umgehen können.

Wer hat sich noch nie über Strings gestolpert, hat sich darüber geärgert oder mindestens gewundert? Du dort hinten? Ok, aber du gehörst zu einer Minderheit ;)

Das Problem ist nicht das Objekt, sondern die Tatsache, dass man absolut keine Kontrolle hat, wer zu einem bestimmten Zeitpunkt alles eine Referenz darauf hat - nur deshalb kommt man wohl auf die Idee nur noch Konstanten zu verwenden.

Das Thema Bohnen hat wohl mit Java selbst nicht viel zu tun. Für mich ist und bleibt es etwas zum Essen, während es für andere eine bestimmte Technik ist, um etwas zu erreichen und die zufälligerweise in Java umgesetzt ist.

Ich musste heute wieder einmal im GUI rumwühlen - hm - wenn da die Objekte immutable wären - :D

Also so eng kann man das nicht sagen.


Zurück zum Thema - ich hab ja mit meinem Neffen zusammen auch mal eine Klasse Bruch geschrieben (liegt bei den Codeschnipseln rum)

Da hab ich den ganz normalen OO Ansatz verwendet. so im Stil der Bruch weiss am Besten wie es geht und soll es gleich ausführen:

meinBruch.kürzen() // der weiss ja wie das geht
meinBruch.addiere() // liefert ganz sicher kein neues Objekt zurück ;-)
meinBruch.multipiliziere()

Da hat auch niemand gesagt das solle nicht so sein ;-)
 
M

maki

Gast
Immutables sind keine Konstanten, Immutable ist ein Konzept/Pattern das u.a. zur OO gehört, aus gutem Grunde, machen die Sache einfacher und es ist schwieriger Mist zu produzieren(aliasing Probleme vermeiden).

Wenn du GUI machst, solltest du doch längst mit JavaBeans zu tun haben...
 

tfa

Top Contributor
Zurück zum Thema - ich hab ja mit meinem Neffen zusammen auch mal eine Klasse Bruch geschrieben (liegt bei den Codeschnipseln rum)

Da hab ich den ganz normalen OO Ansatz verwendet. so im Stil der Bruch weiss am Besten wie es geht und soll es gleich ausführen:

meinBruch.kürzen() // der weiss ja wie das geht
meinBruch.addiere() // liefert ganz sicher kein neues Objekt zurück
meinBruch.multipiliziere()

Da hat auch niemand gesagt das solle nicht so sein
Ok, dann sag ich's: keine gute Lösung. Bruch sollte ein ValueObject sein und damit unveränderlich.
Vorteile und Nachteile, es nicht so zu machen, wurden schon gesagt (siehe java.util.Date als Katastrophenbeispiel).

Du kannst deinem Neffen ja mal den Quelltext von java.math.BigInteger zeigen (ist im Grunde einer Bruch-Klasse ziemlich ähnlich). Da hat man es richtig gemacht.
 

Andi_CH

Top Contributor
Immutables sind keine Konstanten, Immutable ist ein Konzept/Pattern das u.a. zur OO gehört, aus gutem Grunde, machen die Sache einfacher und es ist schwieriger Mist zu produzieren(aliasing Probleme vermeiden).
Zuerst: OO = Objectorientation = Objektorientiertheit
OO == Objektorientiertheit sagt sicher nichts über Programmiertechniken aus
Patterns sind Techniken


nicht Variabel != Konstant???

Ok, wenn man unbedingt willl kann man ja die Sprache neu definieren:
dict.cc mein:
immutable {adj} unveränderlich
constant {adj} unveränderlich

Was ich nicht verändern kann ist konstant! :bahnhof:

Wenn du GUI machst, solltest du doch längst mit JavaBeans zu tun haben...

Also muss eine Applikation mit einem GUI zwinged Bohnen haben? Nö nicht die Bohne.
Es hat ein Gui zur Eingabe von Werten und einen Knopf "Rechne" und am Ende weiss man mehr als zuvor .... keine Ahnung wozu ich da Gemüse brauchen soll.

Wieso kommt mir heute wieder einmal Don Quijotes kampf gegen die Windmühlen in den Sinn ???:L
Ich wünsch euch - sollen die Windmühlen halt Riesen spielen
(Beans = Gui - ts ts ts)
 
M

maki

Gast
Zuerst: OO = Objectorientation = Objektorientiertheit
OO == Objektorientiertheit sagt sicher nichts über Programmiertechniken aus
Patterns sind Techniken
OO steht für Objektorientierung, zumindest wenn ich "OO" schreibe ;)

nicht Variabel != Konstant???

Ok, wenn man unbedingt willl kann man ja die Sprache neu definieren:
dict.cc mein:
immutable {adj} unveränderlich
constant {adj} unveränderlich

Was ich nicht verändern kann ist konstant!
Kann man so auch sehen, ist allerdings nicht hilfreich wenn man Immutables und Konstanten unterscheiden will, immutables kann ich als Klasse darstellen und dynamisch immutable Objekte erzeugen.
Abgesehen davon unterstützt Java keine Konstanten wie C++, nicht umsonst ist das constant Schlüsselwort in Java reserviert aber nicht belegt, final static kommt nahe ran, aber nicht nahe genug.

Also muss eine Applikation mit einem GUI zwinged Bohnen haben? Nö nicht die Bohne.
Es hat ein Gui zur Eingabe von Werten und einen Knopf "Rechne" und am Ende weiss man mehr als zuvor .... keine Ahnung wozu ich da Gemüse brauchen soll.
Eine GUI Anwendung muss auch keine if statements haben, macht die Sache aber einfacher ;)
Alle Java GUI Technologien bieten Unterstützung für JavaBeans, nicht ohne Grund (Swing, SWT/JFace, JSF, JSP, etc. pp.)
Jemand der schon mal GUIs in Java geschrieben hat weiss das.
PropertyChangeSupport sagt dir natürlich auch nichts und MVC kennst du nur auf Papier.

Wieso kommt mir heute wieder einmal Don Quijotes kampf gegen die Windmühlen in den Sinn
Ich wünsch euch - sollen die Windmühlen halt Riesen spielen
(Beans = Gui - ts ts ts)
Das liegt mal wieder daran dass du dein fehlendes Wissen und nicht vorhandene Erfahrung durch Sturheit ersetzen willst und dir nichts sagen lässt :)
Stattdessen fasselst du als Blinder über farben...
 
P

pask

Gast
hi, folgendes Problem :):
Ich habe nun in meinem Bruch-Programm ein zweites Objekt angelegt, damit ich die beiden Brüche miteinander addieren kann etc. Jedoch hat jeder der Brüche beispielsweise einen ggT. Damit der Wert nicht überschrieben wird, müsste z.B. Bruch2 eine andere ggT-Methode aufrufen, also zwei ggT-Methoden schreiben? Dies ist im Moment meine einzige Lösung, mir scheint sie jedoch recht umständlich, kann man das besser lösen?

MfG
pask
 
P

pask

Gast
Habe das Programm etwas umgebaut, (der zweite Bruch wird noch nicht sinnvoll verwendet, kommt später) mein eigentliches Problem sind im Moment die Exceptions. Habe eine Idee, komme aber überhaupt nicht weiter. Hier der Quelltext:
Java:
package Kap03;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BruchMain
{
  static BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
  String                s     = "";

  while (true)
  {
    try
    {
  private static int readZaehler() throws IOException
  {
    System.out.print("Zaehler eingeben: ");
    return Integer.parseInt(input.readLine());
  }

  private static int readNenner() throws IOException
  {
    System.out.print("Nenner eingeben: ");
    return Integer.parseInt(input.readLine());
  }
  break;
    }
    catch (ArithmeticException e)
    {
      System.err("Keine Nullen!")
    }
  }
  public static void main(String[] args) throws IOException
  {
    char repeat = 0;
    String s = "";
    do
    {
          Bruch br = new Bruch();
          br.setZaehler(readZaehler());
          br.setNenner(readNenner());
          br.ggT();
          br.kuerzen();
          br.kgV();

          Bruch br2 = new Bruch();
          br2.setZaehler(readZaehler());
          br2.setNenner(readNenner());
          br2.ggT();
          br2.kuerzen();
          br2.kgV();

          System.out.println("\n[" + br.toString() + "] ggT: " + br.ggT());
          System.out.println("[" + br.toString() + "] kgV: " + br.kgV());
          System.out.println("[" + br.toString() + "] Gekürzt: " + br.ktoString());

          System.out.println("\n[" + br2.toString() + "] ggT: " + br2.ggT());
          System.out.println("[" + br2.toString() + "] kgV: " + br2.kgV());
          System.out.println("[" + br2.toString() + "] Gekürzt: " + br2.ktoString());
      
      System.out.print("Erneut einen Bruch eingeben? (Wiederholen mit 'j' oder 'J'): ");
      s = input.readLine();
      repeat = s.charAt(0);
    } while (repeat == 'j' || repeat == 'J');
  }
}
Java:
package Kap03;

public class Bruch
{
  // Attribute
  private int zaehler, nenner, ggT, kzaehler, knenner;

  // Methoden
  public void setZaehler(int zaehler) // Paramateruebergabe aus BruchMain/Read
  {
    this.zaehler = zaehler; // Parameterwert wird an Attribut "zaehler" uebergeben
  }

  public void setNenner(int nenner)
  {
    this.nenner = nenner;
  }

  public int getZaehler()
  {
    return this.zaehler;
  }

  public int getNenner()
  {
    return this.nenner;
  }

  /*
   * public void add() { return this.nenner* }
   */
  public int kgV()
  {
    return this.zaehler * (this.nenner / this.ggT);
  }
  public int ggT()
  {
    // Vergleich der Teilermengen
    for (int i = 1; i <= this.zaehler; i++)
    {
      if ((this.zaehler % i == 0) && (this.nenner % i == 0))
      {
        this.ggT = i;
      }
    }
    return this.ggT;
  }

  public void kuerzen()
  {
    if (this.ggT == 1 || this.zaehler == 0 || this.nenner == 0)
    {
      System.out.println("Der Bruch ist nicht kuerzbar!");
    }
    else
    {
      this.kzaehler = this.zaehler / this.ggT;
      this.knenner = this.nenner / this.ggT;
    }
  }

  public int getkZahler()
  {
    return this.kzaehler;
  }

  public int getKNenner()
  {
    return this.knenner;
  }

  @Override
  public String toString()
  {
    return this.zaehler + "/" + this.nenner;
  }

  public String ktoString()
  {
    return this.kzaehler + "/" + this.knenner;
  }
}

MfG
pask
 

Andi_CH

Top Contributor
Das liegt mal wieder daran dass du dein fehlendes Wissen und nicht vorhandene Erfahrung durch Sturheit ersetzen willst und dir nichts sagen lässt :)
Stattdessen fasselst du als Blinder über farben...
Was du alles über mich weisst ist verblüffend :applaus:

Java ist und bleibt nun mal ein Subset der OO-Welt - der Informatikwelt überhaupt und wer nur Java kennt sollte - und ich passe mich nur im Ton an - lieber etwas vorsichtig mit Behauptungen sein.

Wie bei mir so üblich - Das wars für mich hier in diesem Thread - jetzt könnt ihr euch die Finger wundtippen und darüber lästern was ich alles angeblich nicht kann
 
Zuletzt bearbeitet:

Antoras

Top Contributor
@pask

Anweisungen dürfen in Java nur innerhalb von Methoden stehen, desweiteren sind sie nur in der Methode gültig in der sie deklariert wurden. Deine while-Schleife (Z.12) und dein try-catch (Z.14) musst du also in eine eigene Methode verschieben und dort die Methoden
Code:
readZaehler
und
Code:
readNenner
aufrufen. Desweiteren was willst du mit der while-Schleife erreichen? Die ist dort unnötig.

Noch was zu Exceptions. Diese sind eigentlich dazu da um auf Fehler reagieren zu können, die nicht vorhersehbar sind. Lies dir dazu mal den Eintrag in der FAQ durch.

Im Klartext heißt das wenn du feststellen kannst, dass ein Fehler auftritt, dann lass es erst gar nicht zu dem Fehler kommen. Ich würde die vom Benutzrer eingegebenen Daten also auch explizit prüfen bevor ich sie mit
Code:
Integer.parseInt
in in einen int umwandeln würde.
Java:
boolean isNumber(String s) {
  for (char c : s.toCharArray()) {
    if (!isNumber(c)) {
      return false;
    }
  }
  return true;
}

boolean isNumber(char c) {
  return c >= '0' && c <= '9';
}

String num = input.readLine();
if (isNumber(num)) {
  Integer.parseInt(num);
} else {
  throw new IllegalArgumentException("Invalid number")
  // anstatt einer Excepiton kann auch ein Fehler auf der Konsole ausgeben werden
  // Eingabe wiederholen
}

Du kannst dir das Leben hier aber auch einfach machen wenn du auf vorgefertigte Klassen des JDK zurückgreifst:
Java:
final Scanner s = new Scanner(System.in);
try {
  final int i = s.nextInt();
  System.out.println(">>" + i);
  // Eingabe weiterreichen
} catch (final InputMismatchException e) {
  System.out.println("Keine Zahl eingegeben.");
  // Eingabe wiederholen
}
 
P

pask

Gast
hallo, mittlerweile habe ich mein Bruchprogramm ein wenig x) umgebaut, unteranderem auch in die GUI. Nach Rat eines Freundes versuche ich mich an das MVC-Modell zu halten, habe aber so einige Probleme dabei. Wenn ich versuche Klassenübergreifend auf Methoden zuzugreifen oder auf Labels bzw. Textfelder bekomme ich immer die Meldungen "cannot be resolved". Ich komme nicht wirklich weiter, vllt ist die Lösung des Problems auch ganz einfach und ich habe nur einen Denkfehler. Folgend der Quelltext.

MfG

pask

Java:
package Kap06;

public class Bruch
{
  int zaehler1, zaehler2, nenner1, nenner2, ggT, kzaehler, knenner, ergebnisz, ergebnisn;

  private void readInput()
  {
    try
    {
       this.zaehler1 = Integer.parseInt(this.tfZaehler1.getText());
       this.zaehler2 = Integer.parseInt(this.tfZaehler2.getText());
       this.nenner1 = Integer.parseInt(this.tfNenner1.getText());
       this.nenner2 = Integer.parseInt(this.tfNenner2.getText());
    }
    catch (NumberFormatException e)
    {
      BruchPopUp p = new BruchPopUp();
    }
  }

  private void multi()
  {
    this.ergebnisz = this.zaehler1 * this.zaehler2;
    this.ergebnisn = this.nenner1 * this.nenner2;
    System.out.println("ErgebnisMultiplizieren: " + this.ergebnisz + "/" + this.ergebnisn);
  }

  public int ggT()
  {
    // Vergleich der Teilermengen
    for (int i = 1; i <= this.zaehler1; i++)
    {
      if ((this.zaehler1 % i == 0) && (this.nenner1 % i == 0))
      {
        this.ggT = i;
      }
    }
    return this.ggT;
  }

  public void kuerzen()
  {
    this.kzaehler = this.zaehler1 / this.ggT;
    this.knenner = this.nenner1 / this.ggT;
  }
  public static void main(String[] args)
  {
    Bruch br = new Bruch();
  }
}

Java:
package Kap06;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Choice;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

@SuppressWarnings("serial")
public class BruchView extends Frame
{
  private final Label lblUeberschrift   = new Label("");
  private final Label lblZaehler1       = new Label("[1] Zaehler:");
  private final Label lblNenner1        = new Label("[1] Nenner:");
  private final Label lblZaehler2       = new Label("[2] Zaehler:");
  private final Label lblNenner2        = new Label("[2] Nenner:");
  private final Label lblErg            = new Label("0");

  private final Panel pnlCenter         = new Panel(new GridLayout(3, 0));
  private final Panel pnlCenterZaehler1 = new Panel(new FlowLayout(FlowLayout.CENTER));
  private final Panel pnlCenterNenner1  = new Panel(new FlowLayout(FlowLayout.CENTER));
  private final Panel pnlCenterZaehler2 = new Panel(new FlowLayout(FlowLayout.CENTER));
  private final Panel pnlCenterNenner2  = new Panel(new FlowLayout(FlowLayout.CENTER));
  private final Panel pnlSouthKuerz     = new Panel();
  private final Panel pnlNorth          = new Panel();
  private final Panel pnlSouth          = new Panel();
  private final Panel pnlSouthChc       = new Panel();

  public Button       btnBeenden        = new Button("Beenden");
  public Button       btnKuerz          = new Button("Kuerzen");

  public TextField    tfZaehler1        = new TextField(10);
  public TextField    tfNenner1         = new TextField(10);
  public TextField    tfZaehler2        = new TextField(10);
  public TextField    tfNenner2         = new TextField(10);
  public TextField    tfErg             = new TextField(10);

  public Choice       chcMth            = new Choice();

  public BruchView()
  {
    this.setTitle("Bruchrechnen");
    this.setLocationRelativeTo(null);
    this.lblUeberschrift.setFont(new Font("", Font.BOLD, 16));

    this.chcMth.add("+");
    this.chcMth.add("-");
    this.chcMth.add("*");
    this.chcMth.add("/");
    this.chcMth.add("ggT");
    this.chcMth.add("kgV");

    this.pnlCenter.add(this.pnlCenterZaehler1);
    this.pnlCenter.add(this.pnlCenterZaehler2);
    this.pnlCenter.add(this.pnlCenterNenner1);
    this.pnlCenter.add(this.pnlCenterNenner2);
    this.pnlSouth.add(this.pnlSouthKuerz);
    this.pnlSouth.add(this.pnlSouthChc);

    this.pnlNorth.add(this.lblUeberschrift);

    this.pnlCenterZaehler1.add(this.lblZaehler1);
    this.pnlCenterZaehler1.add(this.tfZaehler1);
    this.pnlCenterNenner1.add(this.lblNenner1);
    this.pnlCenterNenner1.add(this.tfNenner1);

    this.pnlCenterZaehler2.add(this.lblZaehler2);
    this.pnlCenterZaehler2.add(this.tfZaehler2);
    this.pnlCenterNenner2.add(this.lblNenner2);
    this.pnlCenterNenner2.add(this.tfNenner2);

    this.pnlSouth.add(this.btnKuerz);

    this.pnlSouth.add(this.chcMth);
    this.pnlSouth.add(this.lblErg);
    this.pnlSouth.add(this.tfErg);
    this.pnlSouth.add(this.btnBeenden);

    this.add(this.pnlNorth, BorderLayout.NORTH);
    this.add(this.pnlCenter, BorderLayout.CENTER);
    this.add(this.pnlSouth, BorderLayout.SOUTH);

    this.setVisible(true);
    validate();
    this.pack();

    this.btnBeenden.addActionListener(new ActionListener()
    {

      @Override
      public void actionPerformed(ActionEvent e)
      {
        System.exit(0);
      }

    });

    this.btnKuerz.addActionListener(new ActionListener()
    {

      @Override
      public void actionPerformed(ActionEvent arg0)
      {
        // readInput();
        // kuerzen();
        BruchView.this.lblErg.setText(null);

      }

    });
    this.chcMth.addItemListener(new ItemListener()
    {

      @Override
      public void itemStateChanged(ItemEvent e)
      {
        switch (BruchView.this.chcMth.getSelectedIndex())
        {
          case 0 :
            System.out.println("Case0");
            break;

          case 1 :
            System.out.println("Case1");
            break;

          case 2 :
            System.out.println("Case2");
            break;

          case 3 :
            System.out.println("Case3");
            break;

          case 4 :
            System.out.println("Case4");
            break;

          case 5 :
            System.out.println("Case5");
            break;
        }
      }
    });

    this.addWindowListener(new WindowListener()
    {

      @Override
      public void windowOpened(WindowEvent e)
      {
        // TODO Auto-generated method stub

      }

      @Override
      public void windowClosing(WindowEvent e)
      {
        System.exit(0);
      }

      @Override
      public void windowClosed(WindowEvent e)
      {
        // TODO Auto-generated method stub

      }

      @Override
      public void windowIconified(WindowEvent e)
      {
        // TODO Auto-generated method stub

      }

      @Override
      public void windowDeiconified(WindowEvent e)
      {
        // TODO Auto-generated method stub

      }

      @Override
      public void windowActivated(WindowEvent e)
      {
        // TODO Auto-generated method stub

      }

      @Override
      public void windowDeactivated(WindowEvent e)
      {
        // TODO Auto-generated method stub

      }

    });
  }
}
 
J

JohannisderKaeufer

Gast
[JAVA=117]BruchView.this.lblErg.setText(null);[/code]

Sieht ziemlich suspekt aus.

BruchView ist eine Klasse, damit kannst du nur auf Variablen Methoden die static sind zugreifen.

this gehört zu Instanzen eines Objekts.

BruchView.this dürfte also nicht funktionieren.

lblErg.setText(null);
bzw.
lblErg.setText("");

sollte hier schon eher funktionieren.

Zeile 128 steht die selbe geschichte
[JAVA=128]switch (BruchView.this.chcMth.getSelectedIndex())[/code]

BruchView.this weg und es sollte zumindest kompilieren

[JAVA=128]switch (chcMth.getSelectedIndex())[/code]

Die Methode readInput aus Bruch, sollte eher in BruchView stecken. Da du hier auf die Textfelder zugreifst die in BruchView sind. Das würde im übrigen auch strengstens gegen das MVC-Prinzip sprechen.
 
Zuletzt bearbeitet von einem Moderator:
P

pask

Gast
Hi, danke für eure antworten, habe es auch zum laufen bekommen und etwas übersichtlicher gestaltet. wenn ich jetzt die zähler und nenner einlese steht in den variablen immer der wert 0, warum? ich habe mich mit dem debugmode von eclipse beschäftigt und dieser bricht genau an dieser stelle mit einem thread.exit ab, hängt das problem damit zusammen oder was könnte das sein. ich bin eig der meinung das es so klappen sollte :)
folgend der quelltext, hoffe ihr könnt mir helfen
mfg
pask

Java:
package Kap06;

public class BruchMain
{
  public BruchView w;
  public BruchMain(BruchView w)
  {
    this.w = w;
  }

  public int readZaehler1()
  {
    return Integer.parseInt(this.w.tfZaehler1.getText());
  }

  public int readZaehler2()
  {
    return Integer.parseInt(this.w.tfZaehler2.getText());
  }

  public int readNenner1()
  {
    int n;
    do
    {
      n = Integer.parseInt(this.w.tfNenner1.getText());
      if (n == 0)
      {
        @SuppressWarnings("unused")
        BruchPopUp p = new BruchPopUp();
      }
    } while (n == 0);
    return n;
  }

  public int readNenner2()
  {
    int n;
    do
    {
      n = Integer.parseInt(this.w.tfNenner2.getText());
      if (n == 0)
      {
        @SuppressWarnings("unused")
        BruchPopUp p = new BruchPopUp();
      }
    } while (n == 0);
    return n;
  }

  public static void main(String[] args)
  {
    @SuppressWarnings("unused")
    BruchView br = new BruchView();
  }
}
Java:
package Kap06;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Bruch implements ActionListener
{
  int              zaehler1, zaehler2, nenner1, nenner2, kzaehler, knenner, ggT;

  public BruchView w;
  public Bruch(BruchView w)
  {
    this.w = w;
  }

  @Override
  public void actionPerformed(ActionEvent e)
  {
    Object obj = e.getSource();
    if (obj == this.w.btnBeenden)
    {
      System.exit(0);
    }
    else if (obj == this.w.btnKuerz)
    {
      System.out.println(+this.ggT);
      System.out.println(+this.zaehler1);
    }
  }

  public int ggT()
  {
    // Vergleich der Teilermengen
    for (int i = 1; i <= this.zaehler1; i++)
    {
      if ((this.zaehler1 % i == 0) && (this.nenner1 % i == 0))
      {
        this.ggT = i;
      }
    }
    return this.ggT;
  }

  public void kuerzen()
  {
    this.kzaehler = this.zaehler1 / this.ggT;
    this.knenner = this.nenner1 / this.ggT;
  }
}
Java:
package Kap06;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Choice;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextField;

@SuppressWarnings("serial")
public class BruchView extends Frame
{
  private final Bruch bruchActionListener = new Bruch(this);
  private final Label lblZaehler1         = new Label("[1] Zaehler:");
  private final Label lblNenner1          = new Label("[1] Nenner:");
  private final Label lblZaehler2         = new Label("[2] Zaehler:");
  private final Label lblNenner2          = new Label("[2] Nenner:");
  private final Label lblErg              = new Label("");

  private final Panel pnlCenter           = new Panel(new GridLayout(3, 0));
  private final Panel pnlCenterZaehler1   = new Panel(new FlowLayout(FlowLayout.CENTER));
  private final Panel pnlCenterNenner1    = new Panel(new FlowLayout(FlowLayout.CENTER));
  private final Panel pnlCenterZaehler2   = new Panel(new FlowLayout(FlowLayout.CENTER));
  private final Panel pnlCenterNenner2    = new Panel(new FlowLayout(FlowLayout.CENTER));
  private final Panel pnlSouthKuerz       = new Panel();
  private final Panel pnlSouth            = new Panel();
  private final Panel pnlSouthChc         = new Panel();

  public Choice       chcMth              = new Choice();

  public Button       btnBeenden          = new Button("Beenden");
  public Button       btnKuerz            = new Button("Kuerzen");

  public TextField    tfZaehler1          = new TextField(10);
  public TextField    tfNenner1           = new TextField(10);
  public TextField    tfZaehler2          = new TextField(10);
  public TextField    tfNenner2           = new TextField(10);
  public TextField    tfErg               = new TextField(10);

  public BruchView()
  {
    this.setTitle("Bruchrechnen");
    this.setLocationRelativeTo(null);

    this.chcMth.add("+");
    this.chcMth.add("-");
    this.chcMth.add("*");
    this.chcMth.add("/");
    this.chcMth.add("ggT");
    this.chcMth.add("kgV");

    this.pnlCenter.add(this.pnlCenterZaehler1);
    this.pnlCenter.add(this.pnlCenterZaehler2);
    this.pnlCenter.add(this.pnlCenterNenner1);
    this.pnlCenter.add(this.pnlCenterNenner2);
    this.pnlSouth.add(this.pnlSouthKuerz);
    this.pnlSouth.add(this.pnlSouthChc);

    this.pnlCenterZaehler1.add(this.lblZaehler1);
    this.pnlCenterZaehler1.add(this.tfZaehler1);
    this.pnlCenterNenner1.add(this.lblNenner1);
    this.pnlCenterNenner1.add(this.tfNenner1);

    this.pnlCenterZaehler2.add(this.lblZaehler2);
    this.pnlCenterZaehler2.add(this.tfZaehler2);
    this.pnlCenterNenner2.add(this.lblNenner2);
    this.pnlCenterNenner2.add(this.tfNenner2);

    this.pnlSouth.add(this.btnKuerz);

    this.pnlSouth.add(this.chcMth);
    this.pnlSouth.add(this.lblErg);
    this.pnlSouth.add(this.tfErg);
    this.pnlSouth.add(this.btnBeenden);

    this.add(this.pnlCenter, BorderLayout.CENTER);
    this.add(this.pnlSouth, BorderLayout.SOUTH);

    validate();
    this.setVisible(true);
    this.pack();

    // Ereignissteuerung
    this.btnBeenden.addActionListener(this.bruchActionListener);
    this.btnKuerz.addActionListener(this.bruchActionListener);
    this.addWindowListener(new BruchWindowListener());
  }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Kann kein Objekt (AudioFile in diesem Beispiel) für ein leeren String erzeugen Java Basics - Anfänger-Themen 3
S Objektidentität und gleichheit an diesem Beispiel Java Basics - Anfänger-Themen 7
B Objekt kopieren und sämtliche Referenzen von diesem Objekt? Java Basics - Anfänger-Themen 3
S Was bedeutet ungleich (in diesem Zusammenhang)? Java Basics - Anfänger-Themen 2
jhCDtGVjcZGcfzug Was genau ist mit diesem Quellcode gemeint? Java Basics - Anfänger-Themen 5
jhCDtGVjcZGcfzug Was ist mit diesem Quellcode gemeint? Java Basics - Anfänger-Themen 3
MichelNeedhelp Brauche zu diesem Labyrinth ein Skript? Der Hamster soll im Urzeigersinn das ganze Labyrinth abgehen und wieder an seinem Ursprungsplatz sein. Java Basics - Anfänger-Themen 40
S Wie kann ich bei diesem Code erreichen, das als Ergebnis hier 15 herauskommt? Java Basics - Anfänger-Themen 23
F Methoden Bitte Helft mir meinen Fehler zu finden. Möchte in diesem Bankenprogramm durch die Konsoleneingabe auswählen welches Konto reduziert und welches erhö Java Basics - Anfänger-Themen 17
J Variablen Hilfe bei diesem Code Java Basics - Anfänger-Themen 6
L Ist an diesem Befehl irgendwas falsch? Java Basics - Anfänger-Themen 2
B Wie funktionieren diese Methoden in diesem Sortierverfahren genau? Java Basics - Anfänger-Themen 2
M problem mit diesem zeichen | Java Basics - Anfänger-Themen 10
V in diesem Forum wurde mir am meisten geholfen, daher eine Frage die hier nicht passt. sry (VB Frage) Java Basics - Anfänger-Themen 3
R Schaffe es nicht Random-Programmierung zu vollenden. Wo liegt der Fehler in diesem Code? Java Basics - Anfänger-Themen 13
3 Erste Schritte benötige hilfe bei diesem Script Java Basics - Anfänger-Themen 2
U Was ist an diesem Code falsch? Java Basics - Anfänger-Themen 10
W &-Operator in diesem Zusammenhang Java Basics - Anfänger-Themen 19
A Quellcode aus diesem Forum für komerzielle Zwecke/Bachelor Thesis? Java Basics - Anfänger-Themen 4
X Singleton - In diesem Fall sinnvoll? Java Basics - Anfänger-Themen 22
M 2 Fragen: Vergleich, aber wie? Was passiert in diesem Teil? Java Basics - Anfänger-Themen 18
H Welche Fensterart ist am geschicktesten in diesem Fall ? Java Basics - Anfänger-Themen 6
T Warum Fehlermeldung bei diesem ToString Programm? Java Basics - Anfänger-Themen 2
G Wie generiere ich zu diesem Code ein *.jar-Archiv Java Basics - Anfänger-Themen 6
G Frage zu diesem Code Java Basics - Anfänger-Themen 6
T Beispiel Polymorphie, Tier hund = new Hund(); Java Basics - Anfänger-Themen 3
J Fehlerbehandlung an einem Beispiel Java Basics - Anfänger-Themen 8
U Beispiel Methode size() vom "Collection"-interface... Wie kann man sichtbar machen, was die Methode unter der Haube macht? Java Basics - Anfänger-Themen 8
Blndner Auto Beispiel Java Basics - Anfänger-Themen 4
melisax Beispiel Java umprogrammieren Java Basics - Anfänger-Themen 23
dieter000 Frage zu einem Beispiel... Java Basics - Anfänger-Themen 5
dieter000 Hilfe bei dem Beispiel, wie gehe ich sowas am besten an? Java Basics - Anfänger-Themen 32
marcooooo Kann mir jemand das Beispiel kurz erklären so ungefähr:/ Java Basics - Anfänger-Themen 7
marcooooo Frage zu bestimmten Beispiel Java Basics - Anfänger-Themen 31
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
C Beispiel-Code mit Pair wird nicht compiliert. Java Basics - Anfänger-Themen 8
B Webhooks verstehen - Beispiel? Java Basics - Anfänger-Themen 25
B Java Vererbung Fragen (zu Code Beispiel) Java Basics - Anfänger-Themen 3
J For-Schleife (Beispiel) Java Basics - Anfänger-Themen 6
G Rekursion Beispiel Java Basics - Anfänger-Themen 3
H OOP, wie gehts richtig? (Beispiel von meinem Prof) Java Basics - Anfänger-Themen 6
J Suche simples Beispiel für die EOFException Java Basics - Anfänger-Themen 1
O Wert in einer URL hinzufügen (in meinem Beispiel Google) Java Basics - Anfänger-Themen 7
F jscience Beispiel Java Basics - Anfänger-Themen 0
D Klassen Gesucht: Einfache Beispiel-Klasse für einen Datentyp Java Basics - Anfänger-Themen 7
B Erste Schritte Way of life ohne import - Habe Beispiel, macht Unfug Java Basics - Anfänger-Themen 21
J Kompilieren von HelloWorld Beispiel schlägt fehl Java Basics - Anfänger-Themen 7
Z Schleifen Beispiel: Fakultät Java Basics - Anfänger-Themen 26
M Frage zum generellen Verständiss von OO an einem Beispiel Java Basics - Anfänger-Themen 4
L GridLayout, Beispiel? Java Basics - Anfänger-Themen 2
M Wozu Upcasting? Am Beispiel List = ArrayList Java Basics - Anfänger-Themen 2
L Beispiel Projekte Java Basics - Anfänger-Themen 3
B Erste Schritte HILFE Brauche ein Beispiel für korrekte Syntax mit Semantikfehlern Java Basics - Anfänger-Themen 6
V Objekte/Klassen erstellen - Erklärung anhand Beispiel Java Basics - Anfänger-Themen 4
J Interface Frage zu Interfces am Beispiel Observer Pattern Java Basics - Anfänger-Themen 8
T Erste Schritte für was steht das "this" in dem Beispiel... Java Basics - Anfänger-Themen 2
B Grundlagen von Methoden an folgendem Beispiel Java Basics - Anfänger-Themen 52
E Polymorphie Beispiel Polymorphie Java Basics - Anfänger-Themen 2
M Threads am Beispiel Parkhaus Java Basics - Anfänger-Themen 10
G OOP Beispiel Objekte zugreifen Java Basics - Anfänger-Themen 3
M Suche Beispiel-Spiel Java Basics - Anfänger-Themen 3
M Ganz einfaches Beispiel, finde den Fehler aber nicht :( Java Basics - Anfänger-Themen 2
A Frage zu Beispiel eines Dekorierers von InputStream Java Basics - Anfänger-Themen 4
K return-Anweisung am Beispiel eines Palindroms Java Basics - Anfänger-Themen 18
P Datentypen Warum würde dieses Beispiel nicht funktionieren? Java Basics - Anfänger-Themen 6
V KeyListener Beispiel Java Basics - Anfänger-Themen 13
S Komposition beispiel anhand eines kopierers Java Basics - Anfänger-Themen 4
M Gutes Beispiel für Exception- werfende & behandelnde Methode Java Basics - Anfänger-Themen 5
H Webservice - Einfaches Beispiel Java Basics - Anfänger-Themen 2
b101 OOP Beispiel Klausur Aufgabe der FH Java Basics - Anfänger-Themen 22
T Java Beispiel Bitte helft mir Java Basics - Anfänger-Themen 5
Gonzalez Eingabe des Benutzers mittels readLine()-Methode. Klappt in meinem Beispiel nicht! Java Basics - Anfänger-Themen 7
V Präinkrement Beispiel Java Basics - Anfänger-Themen 14
M Swing Beispiel Java Basics - Anfänger-Themen 2
M [Einfaches Beispiel] Problem mit innere Klassen Java Basics - Anfänger-Themen 4
M Beispiel-Webprojekt: Statt HSQLDB Postgres verwenden Java Basics - Anfänger-Themen 12
M Serialisierung erstes Beispiel Java Basics - Anfänger-Themen 4
razwed4ik zum Beispiel aus Java Insel Buch Java Basics - Anfänger-Themen 7
M DBCP - Kleines Beispiel Java Basics - Anfänger-Themen 3
M Data Access Object - Beispiel Java Basics - Anfänger-Themen 11
M Beispiel für Linked List Java Basics - Anfänger-Themen 9
A programmier beispiel Java Basics - Anfänger-Themen 18
A ausgabe eines arrays - einfaches beispiel Java Basics - Anfänger-Themen 4
Z Beispiel Würfelspiel mit Verwendung von Feldern Java Basics - Anfänger-Themen 7
Q POI Beispiel Programme Java Basics - Anfänger-Themen 2
J Das schöne Bouncing Ball Beispiel. Java Basics - Anfänger-Themen 20
N Java Insel - RMI Beispiel Java Basics - Anfänger-Themen 12
J Plymorphismus - unklarheit zu einem Beispiel Java Basics - Anfänger-Themen 6
S Gutes Beispiel für Vererbung? Java Basics - Anfänger-Themen 14
I Hilfe beim Java-Applet Beispiel Java Basics - Anfänger-Themen 27
G konkretes beispiel: interface hier besser als abstrakte kl. Java Basics - Anfänger-Themen 4
M Brauche ein Beispiel für eine set() get() Methode Java Basics - Anfänger-Themen 4
M Komische Syntax bei Double-Buffering-Beispiel Java Basics - Anfänger-Themen 2
M Brauche Hilfe bei Beispiel. Java Basics - Anfänger-Themen 4
S Beispiel für abgestufte Preisliste Java Basics - Anfänger-Themen 2
S Wrapper-Pattern Beispiel Java Basics - Anfänger-Themen 2
S Model-View-Controller Konzept Beispiel Java Basics - Anfänger-Themen 11
E Fehler im Beispiel? Java Basics - Anfänger-Themen 3
B Was ist falsch an dem beispiel? Java Basics - Anfänger-Themen 4
M Beispiel für sinnvolles finally? Java Basics - Anfänger-Themen 17

Ähnliche Java Themen

Neue Themen


Oben