Dies ist eine statische Kopie unseres alten Forums. Es sind keine Interaktionen möglich.
This is a static copy of our old forum. Interactions are not possible.
  • "Schokoholic" is male
  • "Schokoholic" started this thread

Posts: 2,518

Date of registration: Oct 4th 2006

Location: Hannover

Occupation: Haarspaltung

1

Thursday, July 5th 2007, 2:59pm

Java Übung 10

So, diesmal muss ich wohl mal eine blöde Frage stellen... In der aktuellen Aufgabenstellung steht ja, man soll das Interface Presentable runterladen, verstehen und implementieren. So, und da steht drin

Source code

1
2
3
4
5
6
7
8
9
10
11
12
	/**
	 * Liefert Information über das Leben an einer bestimmten Position
	 * auf dem Spielfeld. Es wird ein Wahrheitswert zurückgegeben, der
	 * "true" ist, wenn die Zelle an der angegebenen Stelle lebt. Die
	 * Nummerierung der Zeilen und Spalten geschieht 0-basiert, d.h.
	 * bei einem Feld der Breite 10 hat die erste Spalte den Index 0
	 * und die letzte den Index 9.
	 * @param x x-Koordinate der zu betrachtenden Zelle
	 * @param y y-Koordinate der zu betrachtenden Zelle
	 * @return wahr, wenn an der angegebenen Position Leben herrscht
	 */
	public boolean getValueAt(int x, int y);

Eingentlich eine ziemlich eindeutige Sache -- die Zählung soll bei 0 starten, wie es bei der Vector-Klasse die man benutzen soll ja auch der Fall ist. Blöd nur, dass sich das Applet mit dem man sein GameOfLifeData dann testen soll nicht daran hält. Das fängt offenbar bei 1 an zu zählen und zählt bis width bzw. height. Ich hab schon ne Weile gebraucht bis ich realisiert hab, dass der Fehler nicht in meiner Klasse lag sondern in dem Applet... Da stellt sich natürlich die Frage ob das Absicht ist um uns arme Studenten zu verwirren oder ob der Schreiber der Klasse einfach nur unaufmerksam war? ;)


Wenns jemand selbst ausprobieren möchte, hier eine Testklasse die auch Presentable implementiert und eine senkrechte und eine waagerechte Linie auf den Bildschirm zeichnet, die mit iterate() ein Feld weiterwandert:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class GameOfLifeData implements Presentable {
	private int w, h, x=0;
	
	public GameOfLifeData(int width, int height) { this.w = width;    this.h = height; }
	
	//Interface Presentable
	public void iterate() { x++;    x = x % Math.max(w, h); }
	public int xDimension() { return w; }
	public int yDimension() { return h; }
	
	public boolean getValueAt(int x, int y) {
		//Geht so nicht. Die "nullte" Zeile bzw. Spalte wird nicht angezeigt.
		//Wenn man (x-1) bzw. (y-1) statt x bzw. y schreibt, klappts.
		//Ergo fängt das Applet bei 1 an zu zählen und nicht bei 0.
		return x == this.x || y == this.x;
	}
}

This post has been edited 1 times, last edit by "Schokoholic" (Jul 5th 2007, 4:07pm)


Brainbug

Alter Hase

  • "Brainbug" is male

Posts: 150

Date of registration: Oct 6th 2002

Location: Hannover (Nordstadt)

Occupation: Hausmann

2

Thursday, July 5th 2007, 4:24pm

RE: Java Übung 10

Hallo,

Deine Feststellung ist richtig, das ist eine falsche Angabe im Interface, ich werde das nochmal in der Doku ändern:

Die Nummerierung der Zeilen und Spalten geschieht 1-basiert, d.h. bei einem Feld der Breite 10 hat die erste Spalte den Index 1 und die letzte den Index 10.

ALLERDINGS: Es darf keine Auswirkungen haben, wenn das 0-basiert implementiert wird, da man ja ein "virtuell unendliches" Feld erstellen soll - das heisst, wird auf Spalte 10 zugegriffen, und es gibt nur 0-9, dann wird eben Spalte 0 zurückgegeben - das führt dann zwar zu einer abweichenden Darstellung, ist aber vom Prinzip her richtig (daher ist mir das auch gar nicht aufgefallen, die Klasse aus dem Lösungsvorschlag arbeitet 0-basiert mit der 1-basierten GUI zusammen).

Sorry, aber hat ja schnell jemand gemerkt (eigentlich sollte die "0-Basiertheit" die Aufgabe leichter machen ;) ...).

Lars

PS: return x == this.x || y == this.x; <- das ist aber auch nicht korrekt, oder? ;)

This post has been edited 2 times, last edit by "Brainbug" (Jul 5th 2007, 4:37pm)


  • "Schokoholic" is male
  • "Schokoholic" started this thread

Posts: 2,518

Date of registration: Oct 4th 2006

Location: Hannover

Occupation: Haarspaltung

3

Thursday, July 5th 2007, 9:10pm

RE: Java Übung 10

Quoted

Original von Brainbug
[...]Es darf keine Auswirkungen haben, wenn das 0-basiert implementiert wird
[...](eigentlich sollte die "0-Basiertheit" die Aufgabe leichter machen ;) ...).

Na da hab ich ja was angerichtet... jetzt ist meinetwegen die Aufgabe schwerer ;(

Aber frag mich nicht wieso das bei mir nocht geklappt hat. Irgendwie hatte ich nur in der ersten Spalte drei Zellen übereinander und im nächsten Schritt ist in der letzten Zeile keine einzelne Zelle aufgetaucht.... warum auch immer. Und das hat mich halt stutzig gemacht und ich hab mal nachgeforscht was da eigentlich passiert.

Jetzt funktioniert auf jeden Fall alles, auch wenn ich das ganze wieder 0-basiert mache. :)

Quoted

PS: return x == this.x || y == this.x; <- das ist aber auch nicht korrekt, oder? ;)

Doch doch, das stimmt so. Ich hätte die Zählervariable vielleicht nicht x nennen sollen sondern t. Diese Zeile erzeugt dann nämlich eine horizontale Linie bei y=t und eine vertikale bei x=t.

This post has been edited 1 times, last edit by "Schokoholic" (Jul 5th 2007, 9:16pm)


Rumpel

Trainee

  • "Rumpel" is male

Posts: 61

Date of registration: Dec 2nd 2005

Location: Hannover

Occupation: Softwareentwickler

4

Friday, July 6th 2007, 1:27pm

Hatte das Problem der Null Basis auch (obwohl ich diesen Beitrag vorher gelesen habe^^). Lag bei mir daran, dass ich die Berechnung über das Feldende hinaus nicht innerhalb des Funktionsaufrufes von getValueAt(...) gemacht habe, sondern davor, nämlich als Parameterübergabe. also wurde in meinem Testprogramm immer ein korrekter Wert übergeben (0<=x<=19), das Applet versuchte jedoch im Bereich (1<=x<=20) zuzugreifen.
Damit es wie von Lars beschrieben funktioniert muss deshalb die Plausibilitätsprüfung innerhalb der getValuAt(...) Funktion erfolgen, damit diese richtig zugeordnet werden. Das Ergebnis (bzw. der Unterschied) ist aber egal, da das Feld ohnehin zufällig gewürfelt wird.

@schoko: was zählst du eigentlich genau mit dem x?
Wer ander'n eine Grube gräbt, der hat ein Grubengrabgerät!

  • "Schokoholic" is male
  • "Schokoholic" started this thread

Posts: 2,518

Date of registration: Oct 4th 2006

Location: Hannover

Occupation: Haarspaltung

5

Friday, July 6th 2007, 7:48pm

Nix bestimmtes.... meistens Zahlen ;)
Das ist nur ein "Minimalbeispiel" an dem man die Problematik mit der 0- bzw. 1-Basiertheit ganz gut sehen kann. Mehr nicht.

GentleGiant

Hamster Inside(R)

  • "GentleGiant" is male

Posts: 283

Date of registration: Oct 3rd 2006

Location: Bad Oeynhausen

Occupation: Software-Entwickler bei Diamant Software

6

Monday, July 9th 2007, 8:42pm

Meine eigene Testklasse funktioniert so weit und auch das Interface ist richtig eingebunden. Treten bei irgendjemandem jetzt noch Fehler mit dem Applet auf? Bei mir will er partout das Applet nicht anzeigen. Im Browser ist da einfach nur eine weiße Fläche.

Markus

the one and only Unterstrich!

Posts: 2,571

Date of registration: Oct 9th 2003

7

Monday, July 9th 2007, 9:15pm

Du kannst dir auch die Konsole anzeigen lassen, geht glaube ich mit dem JavaSymbol in der Taskleite (Windoof vorrausgesetzt). Da bekommt man dann ggf. Fehler angezeigt.
Charmant sein? Hab ich längst aufgegeben. Glaubt mir doch eh keiner...

GentleGiant

Hamster Inside(R)

  • "GentleGiant" is male

Posts: 283

Date of registration: Oct 3rd 2006

Location: Bad Oeynhausen

Occupation: Software-Entwickler bei Diamant Software

8

Monday, July 9th 2007, 9:41pm

Da zeigt der mir überhaupt gar keinen Fehler an. Langsam wird es komisch. Fenster im IE bleibt weiter weiß. Im Firefox gibt der mir eine NullPointerException (macht er aber für alle Applets) aus, das liegt allerdings an einer speziellen Einstellung. Die gibt der mir dann nicht mehr aus, wenn ich diese Einstellung auf Standard bringe.

Neo

Erfahrener Schreiberling

  • "Neo" is male

Posts: 322

Date of registration: Jul 24th 2005

Location: Hannover

Occupation: Informatik

9

Monday, July 9th 2007, 9:44pm

Quoted

Original von GentleGiant
Da zeigt der mir überhaupt gar keinen Fehler an. Langsam wird es komisch. Fenster im IE bleibt weiter weiß. Im Firefox gibt der mir eine NullPointerException (macht er aber für alle Applets) aus, das liegt allerdings an einer speziellen Einstellung. Die gibt der mir dann nicht mehr aus, wenn ich diese Einstellung auf Standard bringe.


Von wo aus startest du die Start.html, bzw. Start_ie.html?

GentleGiant

Hamster Inside(R)

  • "GentleGiant" is male

Posts: 283

Date of registration: Oct 3rd 2006

Location: Bad Oeynhausen

Occupation: Software-Entwickler bei Diamant Software

10

Tuesday, July 10th 2007, 2:34pm

Hab es schon lösen können. Habe statt GameOfLifeData GameofLifeData geschrieben. Also einfach nur nicht Case Sensitive gearbeitet.

This post has been edited 1 times, last edit by "GentleGiant" (Jul 10th 2007, 2:35pm)