Arrays

Eindimensionale Arrays einsetzen

Erste Arrays

Deklariere zwei Arrays long[] x und long[] y und initialisiere sie mit fünf Zufallszahlen im Wertebereich 10 und 500.

Laufe über das Array und gib x/y-Pärchen aus. Enthält z.B. x = {1, 2, 3} und y = {1, 4, 9} soll die Ausgabe auf dem Bildschirm sein:

(1,1), (2,4), (3,9)

Studiere das Beispiel unter http://www.w3schools.com/graphics/tryit.asp?filename=trysvg_polygon. Generiere auf der Konsole eine Ausgabe, die man direkt in das Textfeld auf der Webseite setzen kann. Das generierte XML soll ein Polygon für das eigene Array von Koordinaten zeichnen.

Teil- Lösung

Der Umdreher

Schreibe eine Klassenmethode reverse(...), die ein gegebenes Array umdreht, d. h., dass das erste Element nach der Operation hinten steht und das letzte Element vorne.

public static void reverse( double[] array ) {
  if ( array == null )
    return;
  // ...
}

Lösung

Arithmetische Ausdrücke vorlesen **

Ein mathematischer Ausdruck kann aus Zahlen und Operatoren bestehen. 1 - 2 * 3 / 4 ist ein Beispiel dafür. Wenn dieser Ausdruck vorgelesen werden soll, dann wird ein Computer Folgendes sagen: "eins minus zwei mal drei durch vier". Schreibe eine Methode readTerm(char[] term) mit Array-Operationen, die die Zeichenkette "vorliest". Um es einfach zu machen, beschränken wir uns auf die Zahlen von 0 bis 9.

Voll vergrößert

Gegeben ist ein zweidimensionales Ganzzahl-Array mit Werten von 0 bis 255; das Array stellt gedanklich ein Graustufenbild dar.

Schreibe eine Methode int[][] maginfy(int[][] array, int factor), die ein neues Feld zurückgibt, und das Bild um den gegebenen Faktor skaliert. Aus einem Bild der Größe 100 × 200 und dem Faktor 4 wird also ein Bild der Größe 400 × 800. Bildpunkte werden einfach verdoppelt.

Temperaturen

Gesucht ist ein Programm, was für alle Tage im Jahr die Temperatur speichert.

Bonus: Generiere eine Datei, in der die Durchschnittstemperaturen eines Monats visualisiert werden. Nimm folgende HTML-Datei als Grundlage:

<script src="http://www.chartjs.org/dist/2.7.1/Chart.bundle.min.js"></script>
<script>
var cfg = {
    type: 'bar',
    data: {
        labels: ["Jan", "Feb", "Mrz", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"],
        datasets: [ {
            label: "Durchschnittswerte", fill: false,
            data: [ 6, 3, 15, 9, 25, 17, 15, 19, 23, 28, 20, 9 ],
        } ]
    },
    options: {
        responsive: true,
        title: { display:true, text:'Temperaturverlauf' },
        tooltips: { mode: 'index', intersect: false },
        hover: { mode: 'nearest', intersect: true },
        scales: {
            xAxes: [ { display: true, scaleLabel: { display: true, labelString: 'Monat' } } ],
            yAxes: [ { display: true, scaleLabel: { display: true, labelString: 'Temeratur' } } ]
        }
    }
};
window.onload = () => new Chart(document.getElementById("chart").getContext("2d"), cfg);
</script>
<canvas id="chart" width="500" height="200"></canvas>

Wer hat den Kleinsten? *

Gegeben ist eine Menge von java.awt.Point-Objekten in einem Array points:

Point[] points = { new Point(10, 20), new Point(12, 2), new Point(44, 4) };

Lösung

Der Typumwandler mit Varargs *

Einen String s verwandelt Integer.parseInt(s) in eine Ganzzahl vom Typ int. Eine Liste von Strings soll in eine Sammlung von Ganzzahlen (int) konvertiert. werden. Diese Arbeit soll eine Klassenmethode erledigen:

public static int[] parseInts( String... array ) {
  ...
}

Aufrufen kann man die Methode etwa wie folgt:

String[] numbersAsString = { "1", "234", "333" };
int[]    numbers1 = parseInts( numbersAsString );
int[]    numbers2 = parseInts( "1", "234", "333" );

Lösung

Die Utility-Klasse Arrays

Sortieren von Arrays

Eine nette Hilfsklasse Arrays bietet an, ein Array zu sortieren. Teste dies an der Menge mit den Zufallszahlen. Beobachte die Signaturen der Methode sort(...). Welche Typen werden unterstützt?

Baue ein Fließkomma-Array mit zehn Elementen auf. Fülle es mit Zufallszahlen, die sich mit random() aus java.lang.Math erzeugen lassen. Gib anschließend das Array auf dem Bildschirm aus. Sortiere das Array.

Kann die sort(...)-Methode wirklich alles ohne Weiteres sortieren? Wo könnte ein Problem liegen?

Vergleichen und Ausgabe von Arrays über die Klasse java.util.Arrays

Teste jeweils die statischen Methode toString(...) und deepToString(...) der Klasse Arrays an folgenden Arrays:

Object[] o = { "Eins", "Zwei", "Polizei", new int[]{1, 2, 3} };
Object[] p = { "Eins", "Zwei", "Polizei", new int[]{1, 2, 3} };

Vergleiche auch die statischen Methoden equals(...) und deepEquals(...).

Anagrammtest *

Schreibe eine Methode isAnagramm(String s1, String s2), um zu testen, ob zwei Zeichenketten Anagramme sind. In einem Anagramm kommen dieselben Zeichen möglicherweise in anderer Reihenfolge vor. Zum Beispiel stellen folgende Zeilen Anagramme dar:

Gebe jeweils die Eingabezeilen und eine der folgenden Meldungen aus: "Ja, obige Zeilen sind Anagramme" oder "Nein, obige Zeilen sind keine Anagramme." Man kann davon ausgehen, dass die Zeilen keine Groß- und Kleinbuchstaben sowie Leerzeichen enthalten.

Optional: Bei dem Vergleich der Eingabezeilen sollen Leerzeichen ignoriert und Groß- und Kleinbuchstaben als gleich betrachtet werden.

Lösung