Mit diesem kleinen Programm ist es möglich, dass 2 Werte über die Konsole eingelesen werden und daraus jeweils das Minimum und Maximum ermittelt und ausgegeben wird.
// Es werden zwei Zahlen über die Konsole eingelesen und es
// wird das Minimum und Maximum ermittelt und ausgegeben
import java.io.*;
public class MinMax {
static BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
public static void main(String[] args)
throws IOException
{
int x, y, max, min;
System.out.println("Geben Sie bitte 1. Wert ein: ");
x = Integer.parseInt(br.readLine());
System.out.println("Geben Sie bitte 2. Wert ein: ");
y = Integer.parseInt(br.readLine());
if(x < y)
{
max = y;
min = x;
}
else
{
max = x;
min = y;
}
System.out.println("X = " + x + " Y = " + y + "\n" +
"Max-Wert: " + max + " Min-Wert: " + min);
}
}
Sicher ist es noch nicht wirklich sinnvoll, Min und Max zwischen zwei Zahlen zu ermitteln, doch dieses einfache Beispiel dient der Veranschaulichung, wie es funktioniert.
Viel Spaß beim Ausprobieren.
P.S. Eine erweiterte Version folgt…
Ein kleiner Einschub bezüglich Arrays, die sind ja ganz oft sehr hilfreich und werden weit verbreitet eingesetzt.
Im unten aufgeführten Beispiel habe ich eine Klausuraufgabe nachgebildet, bei der 2 Zahlen per Konsole eingegeben werden sollen, ein Wert für die Anzahl der Schleifendurchläufe und ein Wert für die größte mögliche Zahl.
Weiterhin soll per MATH.random() eine Zahl zwischen 1 und der größten möglichen Zahl erzeugt und in einem Integer-Array abgespeichert werden, das wir uns hierzu erst einmal erzeugen müssen.
Am Ende soll die Anzahl der Zahlen zwischen 1 und max absolut und prozentual ausgegeben werden.
Es folgt der Quelltext:
import java.io.*;
public class Arrays {
static BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
public static void main(String[] args)
throws IOException
{
int anzahl, max, x;
System.out.println("Bitte die Anzahl eingeben: ");
anzahl = Integer.parseInt(br.readLine());
System.out.println("Bitte max-Wert eingeben: ");
max = Integer.parseInt(br.readLine());
int[] a = new int[max];
for(int i=0; i<anzahl; ++i)
{
x = (int) (Math.random() * max) + 1;
++a[x-1];
}
for(int i=0; i<max; ++i)
{
System.out.println(i+1 + ": " + a[i] + "-mal " +
Math.round(a[i] * 100.0 / anzahl) * 1000 / 1000. + " %");
}
}
}
Ihr könnt das Beispiel ja gern selbst erweitern oder auch mal verändern.
Viel Spaß!
zu erstellen. Über diesem Konstruktor gibt es noch einen leeren, der einfach nur ein Objekt der Klasse Girokonto erzeugt, aber keinerlei Wertzuweisung vornimmt. Den habe ich nur mit in das Beispiel aufgenommen, um zu zeigen, das auch ein leerer Konstruktor möglich ist.
Wenn wir unser Girokonto-Objekt erzeugt haben, stehen uns derzeit die Methoden
public double getKontoStand()
{
return k_kontoStand;
}
public double getKontoStand()
{
return k_dispo;
}
public void einzahlen(double betrag)
{
...
}
public void ueberweisen(double betrag, int k_kontoNr)
{
...
}
zur Verfügung.
Die Methoden getKontoStand(), getDispo() und einzahlen() bedürfen sicherlich keiner weiteren Erklärung, wenn doch, dann schreibt mir einfach einen Kommentar oder eine Mail.
Die Methode ueberweisen(double betrag, int k_kontoNr) ist da schon etwas interessanter. In dieser Version wird aktuell nur überprüft, ob das Konto ausreichend Deckung aufweist, ist dies der Fall, wird der Betrag derzeit vom Kontostand abgezogen und der Kontostand wird nach der Transaktion ausgegeben.
Ist das Konto nicht ausreichend gedeckt, wird versucht die Überweisung mit Hilfe des Dispokredits durchzuführen, klappt das, wird der Betrag vom Konto abgezogen und zusätzlich vom Dispo, sonst steht er bei der nächsten Überweisung wieder der volle Dispo zur Verfügung und das wäre im realen Leben ja auch nicht der Fall.
Reicht auch der Dispo nicht, wird eine Fehlermeldung ausgegeben.
Soviel für heute. Wer sich versuchen möchte, kann ja gern ein Objekt erzeugen und schon ein paar Buchungen machen.
Als neues Objekt möchte ich euch eine Girokonto-Klasse vorstellen, auf die Idee kam ich, als ich heute durch ein Forum surfte und die Frage nach einer Methode zum Prüfen des Dispo-Kredits aufkam.
Als erstes machen wir uns einige Gedanken, wie wir das Ganze objektorientiert lösen können.
1. es wird eine Klasse Girokonto benötigt
2. es sollen Methoden zum Einzahlen, Auszahlen, Überweisen, Umbuchen und zum erteilen von Daueraufträgen sowie Abrufen des aktuellen Kontostands zur Verfügung gestellt werden
3. Kontoauszüge sollen als Bildschirmausgabe zur Verfügung stehen
4. beim Erstellen/Eröffnen des Kontos, soll die Möglichkeit bestehen, einen Dispo-Kredit einzurichten, dieses Maximum muss bei jeder Überweisung/Abbuchung vom Konto überprüft werden. Ist das Konto überzogen und der Dispo ausgereizt, soll eine Meldung ausgegeben werden und die Transaktion darf nicht ausgeführt werden
Zur Speicherung der Transaktionen kann ein Array verwendet werden.
Wie hier versprochen, zeige ich jetzt wie einfach das erzeugte Fenster wieder geschlossen und die Applikation somit beendet werden kann.
Ich stelle erst den WindowListener vor, der als Interface von Java zur Verfügung gestellt wird und einfach in die von mir dafür erstellte Klasse “FensterAbhoerer” per implements eingebunden wird.
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
class FensterAbhoerer implements WindowListener
{
@Override
public void windowActivated(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowClosed(WindowEvent e) {
}
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
@Override
public void windowDeactivated(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowDeiconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowIconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowOpened(WindowEvent e) {
// TODO Auto-generated method stub
}
}
Diese, und die anderen Methoden…
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
werden von Eclipse automatisch “importiert” und müssen von uns noch ausprogrammiert werden.
Ich habe, damit wir das Fenster mit dem [x] in der Leiste schließen können, habe ich nun die Zeile
System.exit(0);
reingeschrieben. Die restlichen Methoden können wir erst einmal außer Acht lassen und lassen Sie einfach so im Quellcode stehen.
Hier noch einmal der gesamte Quellcode im Zusammenhang:
import java.awt.Frame;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
class FensterAbhoerer implements WindowListener
{
@Override
public void windowActivated(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowClosed(WindowEvent e) {
}
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
@Override
public void windowDeactivated(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowDeiconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowIconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowOpened(WindowEvent e) {
// TODO Auto-generated method stub
}
}
public class Fenster extends Frame
{
// Instanzvariablen
private String name;
private int x, y;
// Konstruktor
public Fenster(String name, int x, int y, boolean v)
{
this.name = name;
this.x = x;
this.y = y;
this.setSize(x, y);
this.setVisible(v);
}
// Main-Methode
public static void main(String[] args) {
WindowListener ah = new FensterAbhoerer();
Fenster window = new Fenster("Fenster 1", 640, 480, true);
window.addWindowListener(ah);
}
}
Nun können wir das Fenster wieder schließen und damit die Applikation beenden. Im nächsten Artikel werde ich dann ein paar Elemente, wie z.B. Buttons und Textfelder, einfügen.
Nach dem ich gestern eine Mini-Applikation geschrieben habe, die auf der Konsole “Hallo Welt” ausgeben konnte, brennt sicherlich jeder Leser drauf, zu sehen, wie leicht sich mit Java auch grafische Anwendungen programmieren lassen.
Also, hier folgt der Programmcode, den ihr braucht, um ein Fenster zu erzeugen.
import java.awt.Frame;
public class Fenster extends Frame
{
// Instanzvariablen
private String name;
private int x, y;
;
// Konstruktor
public Fenster(String name, int x, int y, boolean v)
{
this.name = name;
this.x = x;
this.y = y;
this.setSize(x, y);
this.setVisible(v);
}
// Main-Methode
public static void main(String[] args) {
Fenster window = new Fenster("Fenster 1", 640, 480, true);
}
}
Damit kannst du nun schon ein Fenster erzeugen.
Das Ergebnis sollte in etwa so aussehen:
Im nächsten Artikel werden wir dann eine Möglichkeit hinzu fügen, dass das Fenster mit dem [x] geschlossen werden kann.
Außerdem werden wir die Klasse Fenster um ein- oder zwei Buttons erweitern.
Es bleibt spannend, also dran bleiben!
Um einmal zu zeigen, die der Datentyp String verwendet werden kann, habe ich das Hallo Welt Programm, du erinnerst dich, einmal verändert.
public class HalloWelt2
{
String zeichenkette = "Hallo Welt - Version 2";
public static void main(String[] args)
{
System.out.println(zeichenkette);
}
}
Die kleine Änderung im Quellcode ist dir sicher schon aufgefallen. Es wurde direkt nach der öffnenden Klammer { der Klasse, wurde eine Variable “zeichenkette” vom Datentyp String deklariert und mit dem Wert “Hallo Welt – Version 2″ initialisiert.
Die Zeichenkette “Hallo Welt” in dem ursprünglichen Programm hatten wir ja direkt im System.out.println – Statement eingetragen und somit ausgegeben.
In der veränderten Version bekommt System.out.println in den Klammern die Variable “zeichenkette” übergeben und die Ausgabe wird so erzeugt.
Zusammenfassend können wir also sagen,
- System.out.println() kann Ausgaben auf der Konsole erzeugen
- im System.out.println() – Statement kann man entweder den Ausgabetext oder eine Variable übergeben, um das Ganze auf der Konsole auszugeben.
In der Sprache Java gibt es eine Menge Datentypen, die wir während unserer Karriere als Programmierer immer wieder verwenden werden.
Datentyp
Wertebereich
Beispiel
1
Boolean
true, false
boolean schalter = true;
2
Byte
-128 – +127
byte zahl;
3
Short
-32768 – + 32767
short wert1;
4
Int
-2147483648 – +2147483647
int a;
5
Long
-9223372036854775808 – +9223372036854775807
long grosseZahl;
6
Char
0 – 65535
char zeichen;
7
String
Zeichenketten variabler Länge
String zeichenkette;
Verwendet man Char, sind einzelne Buchstaben in die Variable einlesbar, 0 – 65535 bedeutet, das die Zeichen 0 – 65535 aus dem ASCII-Code verwendet werden können.