Hallo zusammen,
diese Woche haben wir Zeit (und Lust) das Gelernte der letzten drei Wochen aufzuarbeiten.
Dazu haben wir Java Übungsaufgaben bekommen. Zwei davon möchte ich hier vorstellen:

Doch zunächst zu:
Zahlen - Quadrat - Wurzeln (ZaQuWu)
Die Aufgabenbeschreibung lautet wie folgt:
uebung 02 Klasse ZaQuWu Eingabe: Startwert : integer 2 Endewert : integer 6API Klasse Math
Ausgabe:
Zahl Quadrat Wurzel
2 4 1,4142
3 9 1,7321
4 16 ...
5 ...
6
In https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html kann man nachlesen, was die Funktionen sqrt(double a) und pow(double a, double b) bewirken.
Das fertige Progrämmchen sieht dann z.B. so aus:
App.java
package de.firma;
/**
* Zahl - Quadrat -Wurzel
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Zahl - Quadrat -Wurzel" );
System.out.println(" Gib den Startwert ein!");
int start = Zaquwu.wert();
System.out.println(" Und jetzt gib den Endwert ein!");
int end = Zaquwu.wert();
Zaquwu.zaquwu(start, end);
}
}
Zaquawu.java
package de.firma;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.lang.Math; public class Zaquwu { public static void zaquwu(int start, int end) { System.out.println("Zahl Quadrat Wurzel"); System.out.println("-----------------------"); for (int i = start; i <= end; i++) { double sqrt = Math.sqrt(i); double square = Math.pow(i,2); System.out.printf("%d %6.3f %6.3f",i,square,sqrt); System.out.println(); } } public static int wert() { BufferedReader br = new BufferedReader(new InputStreamReader((System.in))); int wert = 0; try { wert = Integer.parseInt(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 Integer-Zahl eingegeben und damit wird das Programm beendet!"); } return wert; } }
Und hier das Ergebnis:

Die nächste Übung ist schon ein klein wenig umfangreicher, aber immer noch sehr gut für Anfänger (wie mich) geeignet:


Verwenden Sie zur Lösung dieser Aufgabe bitte die im Seminar behandelten Technologien: · Zufallszahlen, Arrays, Schleifen, Eingaben ggf. für das weitere Dreschen eine Phrase. Falls jemand weiter kreative Einfälle in Bezug auf die Aufgabenstellung hat, überraschen Sie mich. Viel Erfolg! Hinweis: Sollten einige Dinge unklar sein, entwickeln Sie eine kreative Lösung. Sollten Sie mich als externen Berater brauchen ;-) blanke@4point.de
Das (halb- (ich habe nur den ersten Teil gemacht, dafür aber mit etwas Bonus ;-)) fertige Programm sieht wie folgt aus:
Phrasen.java
package de.firma.data;public class Phrasen {
//Eigenschaften String[] satzanfang ={"Wir benötigen sofort eine","Wir verlassen uns auf die","Der Staat benötigt dringend eine","Das Volk will die","Schon die alten Ägypter brauchten die","Hier läuft nichts ohne","Das System verlangt eine","Der Markt braucht eine"}; String[] adjektiv = {"erhabene","tiefe","innige","mannhafte","ergebene","freudige","willige","abendländliche","machtvolle","diese unsere","fanatische","unerschütterliche"}; String[] praenomen = {"Zukunfts-","Schicksals-","Vergangenheits-","Abhängigkeits-","Trägheits-","Geistes","Gewissens-","Bildungs-","Kultur-","Erinnerungs-","Seins-","Wesens-"}; String[] nomen = {"Bewusstseinsebene.","Gemeinschaft.","Erhellung.","Aussage.","Besinnung.","Verantwortung.","Bewältigung.","Ergriffenheit.","Gläubigkeit.","Verstrickung.","Gewissheit.","Verpflichtung."}; //Konstruktor public Phrasen() { } // Getter und Setter public String getSatzanfang (int i) throws OutOfRangeException { int sAlaenge = satzanfang.length; if (i >= 0 && i < sAlaenge) { return satzanfang[i]; } else throw new OutOfRangeException("Der Parameter liegt nicht im Mengenbereich"); } public String getAdjektiv(int i) throws OutOfRangeException { int alaenge = adjektiv.length; if (i >=0 && i<alaenge){ return adjektiv[i];} else throw new OutOfRangeException("Der Parameter liegt nicht im Mengenbereich"); } public String getPraenomen(int i) throws OutOfRangeException{ int plaenge = praenomen.length; if (i >=0 && i<plaenge){ return praenomen[i];} else throw new OutOfRangeException("Der Parameter liegt nicht im Mengenbereich"); } public String getNomen(int i) throws OutOfRangeException{ int nlaenge = nomen.length; if (i >=0 && i<nlaenge){ return nomen[i];} else throw new OutOfRangeException("Der Parameter liegt nicht im Mengenbereich"); } public int getSatzLaenge (){ return satzanfang.length; } public int getaLaenge (){ return adjektiv.length; } public int getpLaenge (){ return praenomen.length; } public int getnLaenge (){ return nomen.length; }
}
OutOfRangeException.java
package de.firma.data;public class OutOfRangeException extends Exception {
public OutOfRangeException(String message) {
super(message);
}
}
App.java
package de.firma;import de.firma.data.OutOfRangeException;
import de.firma.data.Phrasen;import java.util.Scanner;
/**
Phrasendreschmaschine
Written by Achim Mertens
08.12.2021
*/
public class App {public static void main(String[] args) {
System.out.println("Phrasendreschmaschine");
Phrasen phr = new Phrasen();
boolean weiter = true;
while (weiter) {
String satan;
String adj;
String prae;
String nom;
int sa = phr.getSatzLaenge();
int la = phr.getaLaenge();
int lp = phr.getpLaenge();
int ln = phr.getnLaenge();
int zufallsa = (int) (Math.random() * sa);
int zufalla = (int) (Math.random() * la);
int zufallp = (int) (Math.random() * lp);
int zufalln = (int) (Math.random() * ln);
try {
satan = phr.getSatzanfang(zufallsa);
adj = phr.getAdjektiv(zufalla);
prae = phr.getPraenomen(zufallp);
nom = phr.getNomen(zufalln);
System.out.println(satan + " " + adj + " " + prae + nom);
} catch (OutOfRangeException e) {
e.printStackTrace();
System.err.println("Bitte gib eine Zahl ein, die innerhalb der Anzahl der Elemente ist.");
}Scanner myObj = new Scanner(System.in); // Create a Scanner object System.out.println("Möchtest du noch eine Weisheist lesen? (j/n)"); String input = myObj.nextLine(); // Read user input if (!input.equals("j")) { weiter = false; } }
}
}
Ergebnis:

Um diese App in der CMD-Konsole ausführen zu können, geht dies mit dem Aufruf von "java", dem package Namen und der Klasse im class-Verzeichnis:
A290111@BE1AA801 MINGW64 ~/Intellij/Phrasen-Dreschmaschine/target/classes (main) $ java de.firma.App Phrasendreschmaschine Wir ben▒tigen sofort eine fanatische Schicksals-Erhellung. M▒chtest du noch eine Weisheist lesen? (j/n)
Wir können die Klassen auch als jar-File zusammenfassen:
Wir erstellen im classes Ordner einen Ordner META-INF und dort drin eine Textdatei MANIFEST.MF mit folgendem Inhalt:

Achtung! Die letzte Zeile braucht ein Carriage Return.
Dann geben wir den Befehl
$ jar -cvmf META-INF/MANIFEST.MF phrasendrescher.jar .
ein. Der Punkt am Ende bezieht sich auf den aktuellen Ordner. Alles was da drin ist wird mit ins jar-File gepackt.
Danach lassen wir das Programm laufen mit:
$ java -jar phrasendrescher.jar

(siehe auch: https://wiki.byte-welt.net/wiki/JAR-Datei, http://www.scalingbits.com/book/export/html/164 und https://javabeginners.de/Grundlagen/Jar_erstellen.php.)
Und wer es als Shortcut auf dem Windows PC haben möchte, gebe folgendes als Ziel ein:
"C:\Windows\System32\cmd.exe" /k java -jar C:\Users\A290111\Intellij\Phrasen-Dreschmaschine\target\classes\phrasendrescher.jar

Jetzt könnte man noch einen cronjob .... ;-)
Ich sollte mal lieber zu den anderen Aufgaben zurückkehren. Mehr davon gibt's in den nächsten Tagen.
Gruß, Achim