Hi,
ich hätte ne Frage zu einer Übung, die ich gerade mache. Denn irgendwie weiß ich nicht weiter. Es gibt schon einen vorgegebenen Code:
Code:
public class sterne {
public static void main(String[] args) {
final int höhe = 3;
final int breite = 8;
char[][] myArr;
myArr = new char[höhe][breite];
for (int i = 0; i < höhe; i++) {
for (int j = 0; j < breite; j++) {
myArr[i][j] = '.';
System.out.print(myArr[i][j]);
}
System.out.println();
}
}
}
Die Angabe lautet: Man soll zwischen der Initialisierung und der Ausgabe noch einen Code, der eine Art mathematische Funktion in das Array „zeichnet“ (Funktion: zu jedem x-Wert muss es einen y-Wert geben) hineinschreiben. Man iteriert also 1x über die ganze Breite des 2-dimensionalen Arrays (0 bis WIDTH-1) und wählt an jeder Stelle einen „y-Wert“, an dem man einen Stern einträgt ('*'). Eine „Konstante Funktion“ wäre dann z.B. y= 1 (An jeder Stelle ist der y-Wert = 1).
So habe ich es probiert:
Code:
for (int x = 0; x < höhe; x++) {
for (int y = 0; y < breite - 1; y++) {
array[x][y] = '.';
if(y == 1){
array[y][x]= '*';
System.out.print(array[y][x]);
}
System.out.print(array[x][y]);
}
System.out.println();
}
Die Ausgabe soll also lauten:
........
********
........
Also sodass eine Zeile Punkte sind und die andere Sterne hat usw... (Kommt dann halt auf HEIGHT und WIDTH an)
Danke schonmal im Voraus
Erstmal würde ich ein bisschen aufräumen und die einzelnen Aspekte des Codes voneinander trennen:
1. Ein Feld initialisieren
2. Eine mathematische Funktion definieren
3. Eine Funktion in das Feld hineinzeichnen
4. Das fertige Feld ausgeben
Und, das ganze ein wenig objektorientiert zu machen, schadet auch nicht.
Java:
importjava.util.function.IntUnaryOperator;publicclassFunktionsPlotter{privatestaticfinalchar LEER ='\u00B7';privatestaticfinalchar GEFUELLT ='\u2022';privatestaticfinalIntUnaryOperator KONSTANTE = x ->1;privatestaticfinalIntUnaryOperator GERADE = x -> x-3;privatestaticfinalIntUnaryOperator PARABEL = x ->(x-7)*(x-7)/10+1;privatefinalint breite, hoehe;privatefinalchar[][] feld;publicFunktionsPlotter(int breite,int hoehe){this.breite = breite;this.hoehe = hoehe;this.feld =newchar[hoehe][breite];}privatevoidgibFeldAus(){for(int y =0; y < hoehe; y++){for(int x =0; x < breite; x++)System.out.print(feld[y][x]=='\0'? LEER : feld[y][x]);System.out.println();}}publicvoidzeichneFunktionInsFeld(IntUnaryOperator f){for(int x =0; x < breite; x++){int y = f.applyAsInt(x);if(y >=0&& y < hoehe)
feld[hoehe - y -1][x]= GEFUELLT;}}publicstaticvoidmain(String[] args){FunktionsPlotter p =newFunktionsPlotter(15,8);
p.zeichneFunktionInsFeld(PARABEL);
p.gibFeldAus();}}
Das stimmt nur bedingt, weil wir den Kenntnisstand des TE nicht kennen.
Sein Code war ja nicht so schlecht. Er muss nur noch darauf achten, was die X- und was die Y-Koordinate ist (und natürlich die Ausgabe, die zuviel ist).
Ich glaube, das eigentliche Problem ist, dass er die Indexierung vertauscht. Mal behandelt er x als Höhenindex und mal als Breitenindex. Also mal steht [x][y] (falsch) und mal [y][[x] (richtig), somit überschreibt er wieder Werte im Array, die er vorhin gesetzt hatte.
Ich glaube, das eigentliche Problem ist, dass er die Indexierung vertauscht. Mal behandelt er x als Höhenindex und mal als Breitenindex. Also mal steht [x][y] (falsch) und mal [y][[x] (richtig), somit überschreibt er wieder Werte im Array, die er vorhin gesetzt hatte.
Also die Lesbarkeit vom geplotteten Graphen verbessert das schon.
(hint: es ist NICHT der Stern oder der normale (Satzende-)Punkt).
Und der Wert einer symbolischen Konstanten erschwert nicht die Lesbarkeit vom Code...
Es ist halt das durch diese Unicode-Sequenz repräsentierte Zeichen.
Ja, das hätte man auch so in den Code schreiben können, wenn Leute ihren Code als UTF-8 speichern.
Grundsätzlich gebe ich dir aber insofern Recht, als dass das hier für diese Aufgabenstellung too much ist.
publicstaticvoidplotFunction(int w,int h,IntBinaryOperator function){for(int y =0; y < h; y++){for(int x =0; x < w; x++){System.out.print((char) function.applyAsInt(x, y));}System.out.println();}}publicstaticvoidmain(String[] args){finalint höhe =5;finalint breite =8;plotFunction(breite, höhe,(x, y)-> y %2==0?'.':'*');}
Man soll zwischen der Initialisierung und der Ausgabe noch einen Code, der eine Art mathematische Funktion in das Array „zeichnet“ (Funktion: zu jedem x-Wert muss es einen y-Wert geben) hineinschreiben.