Hallo!
Eine Übungsaufgabe, die ich mal gemacht hab, lautete, eine "Multiplikations"-Tabelle ausgeben zu lassen, in der die Ergebnisse der Multiplikation zweier Zahlenbereiche (z.B die Zahlen 6 bis 23 multipliziert mit den Zahlen 12 bis 58) aufgeführt sind.
Das größte vorhande Produkt darf aber nicht vierstellig werden, muss also unter 1000 bleiben.
Desweiteren durfte man sich auf natürliche Zahlen beschränken.
Es folgt meine eigene Lösung und ich frage euch, ob es evtl. eine bessere/elegantere/kürzere Lösung gibt.
Ich hab berücksichtigt, dass der Anwender evtl. falsche Eingaben macht und hab es beim Testlauf ziemlich ausgereizt. Bei einem Fall gab das Programm dieselbe Tabelle zweimal aus! Ich finde aber den Punkt nicht, an dem sich das verdoppelt.
Zur besseren Übersicht hab ich JavaDoc mit einfließen lassen und wollte wissen, ob ich das vielleicht auch besser machen könnte.
Wenn es von Bedeutung ist: ich habe 'Eclipse' dafür verwendet.
PS: Ich finde es schaut länger aus, als es ist, also bitte nicht erschrecken!
Eine Übungsaufgabe, die ich mal gemacht hab, lautete, eine "Multiplikations"-Tabelle ausgeben zu lassen, in der die Ergebnisse der Multiplikation zweier Zahlenbereiche (z.B die Zahlen 6 bis 23 multipliziert mit den Zahlen 12 bis 58) aufgeführt sind.
Das größte vorhande Produkt darf aber nicht vierstellig werden, muss also unter 1000 bleiben.
Desweiteren durfte man sich auf natürliche Zahlen beschränken.
Es folgt meine eigene Lösung und ich frage euch, ob es evtl. eine bessere/elegantere/kürzere Lösung gibt.
Ich hab berücksichtigt, dass der Anwender evtl. falsche Eingaben macht und hab es beim Testlauf ziemlich ausgereizt. Bei einem Fall gab das Programm dieselbe Tabelle zweimal aus! Ich finde aber den Punkt nicht, an dem sich das verdoppelt.
Zur besseren Übersicht hab ich JavaDoc mit einfließen lassen und wollte wissen, ob ich das vielleicht auch besser machen könnte.
Wenn es von Bedeutung ist: ich habe 'Eclipse' dafür verwendet.
PS: Ich finde es schaut länger aus, als es ist, also bitte nicht erschrecken!
Java:
/**
* @author 'Private Void' (Nickname auf java-forum.net)
* @version 1.0 (19.12.2009)
*/
/**
* Ich verlagere gern die main-Methode in eine separate Klasse,
* um in der anderen 'static'-Methoden zu vermeiden
*/
final class Start {
/**
* Es erstellt ein Objekt der anderen Klasse, um damit die
* erste Methode aufzurufen
* @param args hat im Grunde nichts weiter zu bedeuten
*/
public static void main(String[] args) {
Ausgabe start = new Ausgabe();
start.Eingabe();
}
}
Java:
import java.util.Scanner;
/**
* Kontrolle, ob die Zahleneingaben der Anforderungen entsprechen
* Mittels for-Schleifen wird nacheinander jede einzelne Zeile der Tabelle generiert
*/
final class Ausgabe {
int smin, smax, zmin, zmax;
/**
* Leerer Konstruktor
* @see main-Methode
*/
protected Ausgabe() {
}
/**
* Für jeden einzelnen Wert wird eine eigene Methode aufgerufen
* Bei jedem Zahlenpaar wird kontrolliert, ob die Eingabe in Ordnung ist
*/
protected void Eingabe() {
System.out.println("waagrerechter Zahlenbereich");
smin = SpaltMin();
smax = SpaltMax();
while (smin > smax) {
System.out.println("Die erste Zahl muss kleiner sein als die zweite!");
smin = SpaltMin();
smax = SpaltMax();
}
System.out.println("senkrechter Zahlenbereich");
zmin = ZeilMin();
zmax = ZeilMax();
while (zmin > zmax) {
System.out.println("Die erste Zahl muss kleiner sein als die zweite!");
zmin = ZeilMin();
zmax = ZeilMax();
}
if (smax * zmax > 999) {
System.out.println("Die größte Zahl der Wertemenge darf höchstens drei Dezimal-Stellen haben!");
Eingabe();
}
Tabelle(smin, smax, zmin, zmax);
}
/**
* @exception behebt Fehler durch Eingaben außerhalb des Datentyps 'int'
* @return waagerechter Minimalwert
*/
private int SpaltMin() {
Scanner in = new Scanner(System.in);
try {
System.out.println("Von:");
smin = in.nextInt();
} catch (Exception e) {
System.out.println("int-Zahl eingeben!");
SpaltMin();
}
return smin;
}
/**
* @exception behebt Fehler durch Eingaben außerhalb des Datentyps 'int'
* @return waagerechter Maximalwert
*/
private int SpaltMax() {
Scanner in = new Scanner(System.in);
try {
System.out.println("Bis:");
smax = in.nextInt();
} catch (Exception e) {
System.out.println("int-Zahl eingeben!");
SpaltMax();
}
return smax;
}
/**
* @exception behebt Fehler durch Eingaben außerhalb des Datentyps 'int'
* @return senkrechter Minimalwert
*/
private int ZeilMin() {
Scanner in = new Scanner(System.in);
try {
System.out.println("Von:");
zmin = in.nextInt();
} catch (Exception e) {
System.out.println("int-Zahl eingeben!");
ZeilMin();
}
return zmin;
}
/**
* @exception behebt Fehler durch Eingaben außerhalb des Datentyps 'int'
* @return senkrechter Maximalwert
*/
private int ZeilMax() {
Scanner in = new Scanner(System.in);
try {
System.out.println("Bis:");
zmax = in.nextInt();
} catch (Exception e) {
System.out.println("int-Zahl eingeben!");
ZeilMax();
}
return zmax;
}
/**
* Erstellt nacheinander jede einzelne Zeile der Tabelle
* @param smin, smax, zmin und zmax von der Eingabe
*/
private void Tabelle(int smin, int smax, int zmin, int zmax) {
int a = smax - smin + 1;
int b = zmax - zmin + 1;
System.out.print(" ");
for (int i = 0; i < a; i++) {
int c = smin + i;
if (c < 10) {
System.out.print(" "+c);
}
else {
System.out.print(" "+c);
}
}
System.out.println("");
System.out.print(" ");
for (int i = 0; i < a; i++) {
System.out.print("----");
}
System.out.println("");
for (int i = 0; i < b; i++) {
int c = zmin + i;
if (c < 10) {
System.out.print(" "+c+" |");
}
else {
if (c < 100) {
System.out.print(" "+c+" |");
}
else {
System.out.print(c+" |");
}
}
System.out.print(" ");
for (int j = 0; j < a; j++) {
int d = smin + j;
int e = c * d;
if (e < 10) {
System.out.print(" "+e);
}
else {
if (e < 100) {
System.out.print(" "+e);
}
else {
System.out.print(" "+e);
}
}
}
System.out.println("");
}
}
}
Zuletzt bearbeitet: