Hallo, ich habe eine Aufgabe in der ich das Erstellen von Method üben soll. Habe dazu ein Rahmenprogramm bekommen, welches die Kreise eine Spirographs berechnet. Dazu soll ich jetzt die noch fehlenden Method-Anweisungen (wenn man das so nennen kann) einfügen. Bin allerdings verwirrt weil mir der Compiler jedesmal die fehlermeldung ausgibt, dass innerhalb der Method-Anweisung irgendwo ne Variable fehlt. Die Deklaration und Initialisierung der Variablen habe ich schon an allen möglihen Stellen probiert, immer das gleiche
Hier zunächst das Rahmenprogramm welches ich bekomen habe:
Soweit ich gesehen habe muss ich für die Zyklen und für Hypozykloide ne Method-Anweisung erstellen. Habe mich zunächst auf die zyklen fokusiert und zweiteres ignoriert.
Hier was ich probiert habe:
Hoffe hier blickt jemand durch?
Hier zunächst das Rahmenprogramm welches ich bekomen habe:
Java:
// OOP - Hausaufgabe 6: Hypozykloide
// Name:
import java.awt.*;
import java.awt.event.*;
class Kurve extends Frame implements WindowListener {
// Fenster-Groesse:
private static final int X_SIZE = 500;
private static final int Y_SIZE = 500;
// Maximale Kooridinaten (positiv und negativ):
private static final int XY_MAX = 200;
// Anzahl Punkte:
private static final int POINTS = 1000;
// Konstruktor (erzeugt Fenster-Objekt):
public Kurve(int[] xArr, int[] yArr, int cycles) {
super("Hypozykloide (" + cycles + " Zyklen)");
xCoords = xArr;
yCoords = yArr;
setBackground(Color.WHITE);
setSize(X_SIZE, Y_SIZE);
setVisible(true);
addWindowListener(this);
}
// Verschiedene Fenster_Ereignisse (ohne Reaktion):
public void windowActivated(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowOpened(WindowEvent e) {}
// Benutzer will Fenster schliessen:
public void windowClosing(WindowEvent e) {
e.getWindow().setVisible(false);
e.getWindow().dispose();
}
// Wenn Fenster geloescht ist, endet das Programm:
public void windowClosed(WindowEvent e) {
System.exit(0);
}
// Attribute fuer zu zeichnende Koordinaten:
private int xCoords[];
private int yCoords[];
// Fehlermeldung und Schluss:
private static void error(String msg) {
System.out.println("Fehler: " + msg);
System.exit(1);
}
// Hier wird gezeichnet:
@Override public void paint(Graphics g) {
// Fensterrahmen beruecksichtigen:
int left = getInsets().left;
int right = getInsets().right;
int xCenter = (X_SIZE - left - right) / 2 + left;
int top = getInsets().top;
int bottom = getInsets().bottom;
int yCenter = (Y_SIZE - top - bottom) / 2 + top;
// Farbe des Zeichenstifts:
g.setColor(Color.red);
// Linienzug zeichnen:
for(int i = 1; i < xCoords.length; i++) {
int x_von = xCoords[i-1] + xCenter;
int y_von = yCoords[i-1] + yCenter;
int x_bis = xCoords[i] + xCenter;
int y_bis = yCoords[i] + yCenter;
g.drawLine(x_von, y_von, x_bis, y_bis);
}
}
// Hauptprogramm:
public static void main(String[] args) {
// Default-Werte fuer Parameter:
int R = 5;
int r = 1;
int a = 4;
// Argumente aus der Kommandozeile:
if(args.length > 3)
error("Zu viele Argumente!");
try {
if(args.length >= 1)
R = Integer.parseInt(args[0]);
if(args.length >= 2)
r = Integer.parseInt(args[1]);
if(args.length >= 3)
a = Integer.parseInt(args[2]);
}
catch(Exception e) {
error("Argument keine ganze Zahl!");
}
if(R <= 0 || r <= 0)
error("R und r muessen positiv sein!");
if(a < 0)
error("a darf nicht negativ sein!");
if(r > R)
error("Es muss r <= R gelten!");
if(R == r && a == 0)
error("Argumente liefern nur Punkt!");
// Schlaufen/Zyklen berechnen:
int n = zyklen(R, r);
// Koordinaten berechnen und pruefen:
int[] xArr = new int[POINTS];
int[] yArr = new int[POINTS];
hypozykloide(R, r, a, xArr, yArr);
for(int i = 0; i < POINTS; i++) {
if(xArr[i] < -XY_MAX || xArr[i] > XY_MAX)
error("xArr[" + i + "] = " + xArr[i]);
if(yArr[i] < -XY_MAX || yArr[i] > XY_MAX)
error("yArr[" + i + "] = " + yArr[i]);
}
// Ergebnisse anzeigen:
new Kurve(xArr, yArr, n);
}
// Hier Ihre Methode zur Berechnung der Anzahl Zyklen:
// Hier Ihre Prozedur zur Berechnung der Koordinaten:
}
Soweit ich gesehen habe muss ich für die Zyklen und für Hypozykloide ne Method-Anweisung erstellen. Habe mich zunächst auf die zyklen fokusiert und zweiteres ignoriert.
Hier was ich probiert habe:
Java:
// OOP - Hausaufgabe 6: Hypozykloide
// Name:
import java.awt.*;
import java.awt.event.*;
class Kurve extends Frame implements WindowListener {
// Fenster-Groesse:
private static final int X_SIZE = 500;
private static final int Y_SIZE = 500;
static int zyklen (int R, int r) {return double n=R/ggT;}
// Maximale Kooridinaten (positiv und negativ):
private static final int XY_MAX = 200;
// Anzahl Punkte:
private static final int POINTS = 1000;
// Konstruktor (erzeugt Fenster-Objekt):
public Kurve(int[] xArr, int[] yArr, int cycles) {
super("Hypozykloide (" + cycles + " Zyklen)");
xCoords = xArr;
yCoords = yArr;
setBackground(Color.WHITE);
setSize(X_SIZE, Y_SIZE);
setVisible(true);
addWindowListener(this);
}
// Verschiedene Fenster_Ereignisse (ohne Reaktion):
public void windowActivated(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowOpened(WindowEvent e) {}
// Benutzer will Fenster schliessen:
public void windowClosing(WindowEvent e) {
e.getWindow().setVisible(false);
e.getWindow().dispose();
}
// Wenn Fenster geloescht ist, endet das Programm:
public void windowClosed(WindowEvent e) {
System.exit(0);
}
// Attribute fuer zu zeichnende Koordinaten:
private int xCoords[];
private int yCoords[];
// Fehlermeldung und Schluss:
private static void error(String msg) {
System.out.println("Fehler: " + msg);
System.exit(1);
}
// Hier wird gezeichnet:
@Override public void paint(Graphics g) {
// Fensterrahmen beruecksichtigen:
int left = getInsets().left;
int right = getInsets().right;
int xCenter = (X_SIZE - left - right) / 2 + left;
int top = getInsets().top;
int bottom = getInsets().bottom;
int yCenter = (Y_SIZE - top - bottom) / 2 + top;
// Farbe des Zeichenstifts:
g.setColor(Color.red);
// Linienzug zeichnen:
for(int i = 1; i < xCoords.length; i++) {
int x_von = xCoords[i-1] + xCenter;
int y_von = yCoords[i-1] + yCenter;
int x_bis = xCoords[i] + xCenter;
int y_bis = yCoords[i] + yCenter;
g.drawLine(x_von, y_von, x_bis, y_bis);
}
}
// Hauptprogramm:
public static void main(String[] args) {
// Default-Werte fuer Parameter:
int R = 5;
int r = 1;
int a = 4;
for (int ggT=0;R==r;ggT++) {
R=R-r;
}
// Argumente aus der Kommandozeile:
if(args.length > 3)
error("Zu viele Argumente!");
try {
if(args.length >= 1)
R = Integer.parseInt(args[0]);
if(args.length >= 2)
r = Integer.parseInt(args[1]);
if(args.length >= 3)
a = Integer.parseInt(args[2]);
}
catch(Exception e) {
error("Argument keine ganze Zahl!");
}
if(R <= 0 || r <= 0)
error("R und r muessen positiv sein!");
if(a < 0)
error("a darf nicht negativ sein!");
if(r > R)
error("Es muss r <= R gelten!");
if(R == r && a == 0)
error("Argumente liefern nur Punkt!");
// Schlaufen/Zyklen berechnen:
int n = zyklen(R, r);
// Koordinaten berechnen und pruefen:
int[] xArr = new int[POINTS];
int[] yArr = new int[POINTS];
hypozykloide(R, r, a, xArr, yArr);
for(int i = 0; i < POINTS; i++) {
if(xArr[i] < -XY_MAX || xArr[i] > XY_MAX)
error("xArr[" + i + "] = " + xArr[i]);
if(yArr[i] < -XY_MAX || yArr[i] > XY_MAX)
error("yArr[" + i + "] = " + yArr[i]);
}
// Ergebnisse anzeigen:
new Kurve(xArr, yArr, n);
}
// Hier Ihre Methode zur Berechnung der Anzahl Zyklen:
// Hier Ihre Prozedur zur Berechnung der Koordinaten:
}
Hoffe hier blickt jemand durch?