/* Beispiel fuer den Umgang mit mehrdimensionalen Arrays Wir lesen hier eine n x m - Matrix ein, wobei n (die Anzahl der Zeilen) und m (die Anzahl der Spalten) vom Benutzer zu Beginn des Programms eingegeben werden. Dann erfolgt das Einlesen der Werte (d.h. das Fuellen der Matrix) sowie die Ausgabe der Matrix am Bildschirm. Der Benutzer wird dann gefragt, zu welcher Zeile er die Zeilensumme berechnen lassen moechte. Bei gueltiger Eingabe wird diese Berechnung durchgefuehrt und das Ergebnis ausgegeben. Beachtet, dass dieses Programm soweit wie moeglich in Methoden aufgeteilt wurde und besonderen Wert auf eine saubere Fehlerbehandlung legt. nh - 06/2009 */ import IOulm.*; public class MatrixExample { /* Methode zur Ausgabe einer Fehlermeldung auf die Standard-Fehlerausgabe; Das Programm wird danach mit dem Exitstatux "exStatus" beendet. */ public static void error(String msg, int exStatus) { Write.ErrorLine(msg); System.exit(exStatus); } /* Ausgabe der als Parameter uebergebenen Matrix am Bildschirm; beachtet, dass hier die Zeilen- und Spaltenanzahl dynamisch ermittelt werden (d.h. nirgends fest im Programm stehen). Weil der einzige Zweck der Methode die Ausgabe am Bildschirm ist, hat sie keinen Rueckgabewert (Typ: void). */ public static void printMatrix(int[][] matrix) { for (int i = 0; i < matrix.length; i++) { for (int j = 0; j < matrix[i].length; j++) { Write.Int(matrix[i][j]); Write.String(" "); } Write.Ln(); } } /* Ausgelagertes Einlesen einer Zahl, die beim ersten Aufruf als Zeilen- und beim zweiten Aufruf als Spaltenanzahl verwendet wird. */ public static int getDimension(String type) { int dim; Write.String("Bitte die gewuenschte " + type + " eingeben: "); if (!Urc.readInt()) { error("Fehler beim Einlesen der " + type, 1); } dim = Urc.getInt(); if (dim <= 0) { error("Ungueltige Dimension der " + type + "!", 2); } return dim; } /* Die als Referenz-Parameter uebergebene Matrix wird hier mit Inhalt gefuellt, der von der Standardeingabe gelesen wird. Auch hier ist sowohl die Zeilenanzahl als auch die Spaltenanzahl nirgends fest im Programm geschrieben, sondern wird dynamisch ermittelt; der Rueckgabetyp ist "boolean" und gibt an, ob das Einlesen der kompletten Matrix erfolgreich war oder nicht */ public static boolean readMatrix(int[][] candidate) { for (int i = 0; i < candidate.length; i++) { for (int j = 0; j < candidate[i].length; j++) { if (!Urc.readChar()) { return false; } candidate[i][j] = Urc.getInt(); } } return true; } /* Methode zur Berechnung der Zeilensumme; uebergeben wird die Matrix sowie die Zeilenzahl, deren Summe berechnet werden soll; der Rueckgabewert (Typ: int) ist die Summe der Eintraege in der entsprechenden Zeile */ public static int rowSum(int[][] matrixCandidate, int rowCandidate) { if (rowCandidate <= 0 || rowCandidate > matrixCandidate.length) { error("Ungueltige Eingabe fuer Wahl der Zeile bei Zeilensumme!", 5); } rowCandidate = rowCandidate - 1; // weil Array bei 0 zu zaehlen beginnt int rowSum=0; for (int j=0; j