Java Grundlagen – Block2 (Java Basics) – Tag 2

Ich nehme derzeit an einer Akademie zum Java Fullstack Software Engineer teil. In den kommenden Wochen möchte ich hier meine Mitschrift, so gut es geht, aufzeichnen und mitteilen. Hier ist das, was ich vom zweiten Tag in Block 2 gelernt und behalten habe:

Datentypen und Ihre Längen: https://docs.oracle.com/javase/8/docs/api/index.html?overview-summary.html

Aufgabe: Wir wollen die Verarbeitung aus dem Monolithen (EVA) separieren:

File/New Project/Maven/archetype-quickstart, Projektame:0202-kreisrechner-utility, GroupID: de.firma, Pom.xml nach 11 wechseln

Wir erstellen in der Struktur de.firma das Package "Appl" und refaktorieren unsere Datei App.java dorthin:

Ich habe sie im falschen Verzeichnis ertellt. Per drag und drop, kann man die Datei verschieben. Es wird dann gefragt, ob wir refactoren wollen. Ja, das tun wir:

Wir erstellen eine neue Klasse Kreisrechner:

package de.firma.util;

public final class Kreisrechner {

public static double flaeche(double radius) {
    return Math.PI * Math.pow(radius, 2);
}

public static double umfang(double radius) {
    return 2 * Math.PI * radius;
}

}

In der der App-Klasse steht jetzt folgendes:

package de.firma.appl;

import de.firma.util.Kreisrechner;

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

/**

  • Kreisrechner

  • fläche = Pi * Radius * Radius

  • Umfang = 2 * Pi * Radius
    */
    public class App {
    public static void main(String[] args) {

     // Vorbereitung für die Eingabe via Tastatur
     //  InputStreamReader isr = new InputStreamReader(System.in);  //Verknüpfung von Tastatur mit Systembus
     //  BufferedReader br = new BufferedReader(isr); //Verknüpfung vom Systembus mit dem Speicher
    
     BufferedReader br = new BufferedReader(new InputStreamReader((System.in)));
     boolean fehler = false;
    
     while (fehler == false) {
    
         System.out.println("Kreisrechner");
         System.out.println("---------------------------");
         System.out.println("Bitte Radius eingeben: ");
    
         try {
    

//Eingabe
double radius = Double.parseDouble(br.readLine());
//Verarbeitung
// double flaeche = radius * radius * 3.14159265;
// double umfang = 2 * radius * 3.14159265;

            double flaeche = Kreisrechner.flaeche(radius);
            double umfang = Kreisrechner.umfang(radius);

//Ausgabe
System.out.printf("Radius %f \n", radius);
System.out.printf("Fläche %f \n", flaeche);
System.out.printf("Umfang %f \n", umfang);
} catch (IOException e) {
e.printStackTrace();
System.err.println("Irgendwas hat die Verbindung gekappt.");
fehler = true;
} //Fehlermeldung, wenn z.B. das Kabel durchschnitten wird

        catch (NumberFormatException e) {
            System.err.println("Sach ma, kannste nicht ne vernünftige Zahl eingeben du Trottel?");
            fehler = true;
        }
    }
}

}

Das hat funktioniert.

--------------------------------------

Übungsaufgabe Block2_Ueb01:

  • Neues Projekt:
  • Kehrwertrechner (1/x)
  • z.B. Eingabe: 2, Ausgabe=0.5
  • *) Kehrwertrechner -> Utility-Klasse
  • **) Formatierte Ausgabe mit max. 3 Nchkommstellen
  • ***) Wiederhole die Eingabe so lange bis der Benutzer abbrechen möchte
package de.firma;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**

  • Umkehrrechner.

  • Dieses Programm gibt den Umkehrweert der Eingabe zurück.
    */
    public class App {
    public static void main(String[] args) {
    BufferedReader br = new BufferedReader(new InputStreamReader((System.in)));
    boolean fehler = false;
    while (fehler == false) {
    try {
    //Eingabe
    System.out.println("Hallo lieber User, bitte gib den Wert ein, den ich umkehren soll:");
    double wert = Double.parseDouble(br.readLine());

             //Verarbeitung
             double uwert = Uwertrechner.umkehren(wert);
    
             //Ausgabe
             System.out.printf("Der Umkehrwert ist: %6.3f", uwert);
             System.out.println();
             System.out.println("Bitte gib 'q' ein, um abzubrechen");
         } catch (IOException e) {
             e.printStackTrace();
             System.err.println("Irgendwas hat die Verbindung gekappt.");
             fehler = true;
         }  //Fehlermeldung, wenn z.B. das Kabel durchschnitten wird
    
         catch (NumberFormatException e) {
             System.err.println("Es wurde keine Zahl eingegeben und damit wird das Programm beendet!");
             fehler = true;
         }
     }
    

    }
    }

package de.firma;

public class Uwertrechner {
public static double umkehren (double wert) {
return 1 / wert;
}
}

Oder noch schöner:

App.java:

App.java:
package de.firma;
import de.firma.util.Abfrage;
import de.firma.util.Uwertrechner;

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

  • Umkehrrechner.

  • Dieses Programm gibt den Umkehrweert der Eingabe zurück.
    */
    public class App {
    public static void main(String[] args) {
    BufferedReader br = new BufferedReader(new InputStreamReader((System.in)));
    boolean fehler = false;
    while (fehler == false) {

             //Eingabe
             double wert=Abfrage.wert();
    
             //Verarbeitung
             double uwert = Uwertrechner.umkehren(wert);
    
             //Ausgabe
             System.out.printf("Der Umkehrwert ist: %6.3f", uwert);
             System.out.println();
    
             fehler = Abfrage.ausstieg();
    
     }
    

    }
    }

Uwertrechner.java

package de.firma.util;

public class Uwertrechner {
public static double umkehren (double wert) {
return 1 / wert;
}
}

Abfrage.java:

package de.firma.util;

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

public class Abfrage {
public static boolean ausstieg() {
BufferedReader br = new BufferedReader(new InputStreamReader((System.in)));
boolean aus = false;
System.out.println("Wenn du aufhören willst, gib bitte ein 'q' ein!");
String weiter = null;
try {
weiter = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
if (weiter.equals("q")) {
aus = true;
}
return aus;
}

public static double wert() {
    BufferedReader br = new BufferedReader(new InputStreamReader((System.in)));
    System.out.println("Hallo lieber User, bitte gib den Wert ein, den ich umkehren soll:");
    double wert = 0;
    try {
        wert = Double.parseDouble(br.readLine());
    } catch (IOException e) {
        e.printStackTrace();
        System.err.println("Irgendwas hat die Verbindung gekappt.");
    }  //Fehlermeldung, wenn z.B. das Kabel durchschnitten wird

    catch (NumberFormatException e) {
        System.err.println("Es wurde keine Zahl eingegeben und damit wird das Programm beendet!");
    }
    return wert;
}

}

Ein Vergleich von einem Objekt (String) mit einem Charakter geht in die Hose. Es sind zwei verschiedene Speicherstellen und deren Inhalt dürfte nicht identisch sein.

Dafür gibt es bei String die Methode "equals":

-------------------------

Vergleiche

Wir erstellen ein neues Package in firt maven projekt "compare":

Mit der Klasse Compare:

Alpha und beta sind nur deswegen gleich, weil sie gerade frisch erstellt wurden:

Obj1 ist ungleich obj2

Fazit: primitive Literale kann man mit == vergleichen, Objekte sollte man mit equals vergleichen.

Casting Beispiele (Achtung Java in Versionen vor 8 erzeugen beim Teilen von Integer falsche Werte):

---------------------------------------------------

Datenklassen

Wir erstellen Datenklassen (de.firma.model)

(Model -> Datenklassen)

Neue Klasse: Person

Das Problem daran ist, dass jeder von außen die Daten verändern kann. Z.B. den Puls.

Daher stellen wir es auf private und kapseln die Daten.

Mit Getter und Setter Methoden, kann ich Zugriff gewähren

Wir klicken auf Code/generate/Getter

Und wiederholen das für die Setter. Das Ergebnis sieht so aus:

Wenn man Logs schreiben will, ist es sinnvoll die von der Klasse Object geerbte ToString-Methode zu überschreiben:

Objekt-Verantwortlichkeit/Sichtbarkeit:

Klassenarten

  • Applikationsklassen
    • Sie beinhalten eine Methode: public static void main (Strin [] args)
    • Sie haben keine weiteren Methoden
    • Sie haben keine weiteren Eigenschaften
  • Hilfsklassen (Utility-Klassen)
    • Sie haben in der Regel wenige Eigenschaften (Daten/Werte)
    • Static Methoden -> Klassenmethoden (sie sind kursiv geschrieben)
  • Datenklassen
    • Sie haben viele Eigenschaften
    • Sie haben Konstruktoren
    • Sie haben Getter und Setter Methoden
    • Sie haben ggf. Busines Logik

——————

Disclaimer

Alles was ich mitschrieb und verstanden habe ist ohne Gewähr.

Besten Dank an unseren

Trainer: Hans-Joachim Blanke [email protected]

Mehr dazu im nächsten Blog von mir.

Gruß, Achim Mertens



0
0
0.000
1 comments
avatar

pixresteemer_incognito_angel_mini.png
Bang, I did it again... I just rehived your post!
Week 82 of my contest just started...you can now check the winners of the previous week!
!BEER
9

0
0
0.000