# Counter erstellen - Was mache ich falsch?



## mAjOrPaYnE666 (7. Sep 2008)

Hallo liebe User, 
vorab möchte ich mich schonmal entschuldigen, fals meine Frage hier falsch platziert ist.
Ich habe echt wenige Kenntnisse ( Bin seit einer Woche in meinem Studium mit dem "Programmieren" angefangen)
In unserem Lehrbuch "Programming and Object orientated Design using Java (3rd Edition)" wird in Kapitel 2 gezeigt, wie man einen simplen Counter als Klasse erstellt. 
Er braucht nur 1 query: current count
              2 commands: rest, incrementCount

Wenn ich nun die im Buch beschrieben Schritte verfolge bekomme ich in Dr.Java immer nen Error, das sieht dann alles wie folgt aus: 

> package counters; 
> public class Counter {
}
> public int currentCount () {
public void incrementCount () {
Syntax Error: "public int currentCount ( ) { public"
> public int currentCount () {


Was mache ich falsch? Danke im vorraus!  :###


----------



## Templon (7. Sep 2008)

Poste mal den code dazu.

Ich denke da fehlt irgendwo eine }-Klammer, um die currentCount Methode ab zu schliessen.


----------



## Landei (7. Sep 2008)

Was ist Dr. Java?

Abgesehen davon, es sieht so aus, als machst du deine Klasse gleich wieder "zu". Die Methoden gehören *in* die Klasse, nicht dahinter. Mit anderen Worten: Du "klammerst" falsch.

Das Grundgerüst deiner Klasse sollte so aussehen:

```
public class Counter {

  public int currentCount() {
    ...
  }

  public void reset() {
     ...
  } 

  public void incrementCount() {
     ...
  }

}
```


----------



## mAjOrPaYnE666 (7. Sep 2008)

Danke für die schnellen Antworten.
Jo, der Fehler war, dass ich falsch geklammert hab, nun funktionierts, d.h. viel mehr ich bekomme keinen Error mehr, was genau ich nun damit machen kann, weiss ich immer noch nicht ; )


----------



## mAjOrPaYnE666 (7. Sep 2008)

Danke für die schnellen Antworten.
Jo, der Fehler war, dass ich falsch geklammert hab, nun funktionierts, d.h. viel mehr ich bekomme keinen Error mehr, was genau ich nun damit machen kann, weiss ich immer noch nicht ; )

sry für Doppelpost, kanns leider net löschen


----------



## MiDniGG (7. Sep 2008)

Nuja. Eben irgendetwas hochzählen und dann wieder auf 0 setzen :-D


----------



## mAjOrPaYnE666 (7. Sep 2008)

MiDniGG hat gesagt.:
			
		

> Nuja. Eben irgendetwas hochzählen und dann wieder auf 0 setzen :-D



Aber dafür braucht man doch noch Methoden oder nicht? Bin jetzt soweit, dass ich das als code hab: 

```
package counters;
public class Counter {
  /** 
   * Create a new Counter, with the count initialized to 0.
   */
  public Counter () {
  return 0;
  }
  // Queries:
  /**
   * The number of items counted.
   */
  public integer currentCount () {
  }
  //Commands:
  /**
   * Increment the count by 1.
   */
  public void incrementCount () {
  }
  
  /**
   * Reset the count to 0.
   */
  public void reset () {
  }
}
```
Jetzt wollen die von mir, dass ich nen neues Object erstelle:

```
> import counters.*;
> Counter c = new Counter ();
```
Aber das bekomm ich irgendwie nicht hin. Da kommt dann immer son Auto-Import Class Pop-Up, womit ich nichts anfangen kann.


----------



## Der Müde Joe (7. Sep 2008)

Ein Konstruktor hat keinen Rückgabetypen. 

also


```
public Counter () { }
```

reicht aus

du möchtest den Counter mit 0 initialisieren. dafür brauchst du eine Variable, welche dieses auch hält
für jedes Counter-Objekt


```
private int count;

public Counter() {
this.count = 0;
}
```

Der Konstruktor erstellt ein neues Counter-Objekt und initialisiert den count mit 0.
du hast nun Methoden, welche mit dem Objekt arbeiten.
zB. reset..


```
public void reset() {
this.count = 0;
}
```

die Methode stellt die Variable count wieder auf 0. Jedes Count-Objekt hat ein eigenes count.

>public integer currentCount () { 

Der Type integer gibt es nicht: Es gibt den primitiven Typ "int" und das Klasse "Integer" (Wrapper-Klasse für int)

> Da kommt dann immer son Auto-Import Class Pop-Up, womit ich nichts anfangen kann.

Hä. Schaff dir eine anständige IDE (Eclipse, Netbeans oder für den Anfang JCreator evtl.) an 
oder machs via einen einfachen Editor (Nein, nicht Notepad, WordPad oder so was von MS). 
zB Scite oder so was und benutz die Shell, Kommandozeile fürs Kompilieren


----------



## mAjOrPaYnE666 (7. Sep 2008)

Ehrm ja, ich versteh leider kein Wort : \


----------



## Der Müde Joe (7. Sep 2008)

Hmm... naja zum mal schauen:


```
public class Counter {
	
	//jedes Objekt hat ein eigenes count Feld
	private int count;
	
	//Create a new Counter, with the count initialized to 0. 
	public Counter () {
		this.count = 0;
		//this(0); eigentlich besser, aber egal
	}
	
	// Erstelle Counter mit einem anderen start wert als 0
	public Counter (int count) {
		// das count Feld von diesem Objekt (this) ist gleich dem übergebenen count
		this.count = count;
	}
		
	public void reset() {
		// setzt das count wieder auf 0
		this.count = 0;
	}
	
	//gibt den Wert von count zurück
	public int getCounter() {
		return this.count;
	}
	
	public static void main(String[]  args) {
		//erstelle ein Counter Objekt
		Counter c0 = new Counter();
		//erstelle Counter mit anfagswert 7
		Counter c7 = new Counter(7);
		
		System.out.println(c0.getCounter()); //prints 0
		System.out.println(c7.getCounter()); //prints 7
		//reseted c7
		c7.reset();
		System.out.println(c7.getCounter()); //prints 0
	}
}
```


----------



## mAjOrPaYnE666 (7. Sep 2008)

Danke sehr für die detailierte Ausführung :toll:


----------



## Landei (7. Sep 2008)

Jetzt fehlt dir nur noch die increaseCounter() Methode, aber das solltest du wirklich selber machen. Abschreiben bringt nix :-D


----------



## Schandro (7. Sep 2008)

machst du wiklich schon nach 1 Woche Java OOP?? Falls du wirklich ansonsten keine Programmier Ehrfahrung hast würd ich dir raten,  am anfang zu beginnen 
Ich z.b. hab erst nach 2 Monaten mit OOP angefangen


----------



## Landei (8. Sep 2008)

OOP *ist* der Anfang.


----------



## ARadauer (8. Sep 2008)

> Ich z.b. hab erst nach 2 Monaten mit OOP angefangen


das halte ich für eine schlechte idee, warum alte funktional orientierte paradigmen eintrichtern wenn man java programmieren will?


----------



## andre111 (8. Sep 2008)

OOP ist ja nicht mal java spezifisch, und wenn man das prinzip von klassen und objekten verstanden hat, dann sollte das umsetzen in source-code kein allzu großes problem mehr sein ( bei einfachen anfängeraufgaben )


----------



## Landei (8. Sep 2008)

ARadauer hat gesagt.:
			
		

> das halte ich für eine schlechte idee, warum alte funktional orientierte paradigmen eintrichtern wenn man java programmieren will?



Ich weiß, was du meinst und stimme voll zu.

Leider hat der Begriff "funktionale" Programmierung zwei völlig unterschiedliche Bedeutungen: 
- Einmal in Sprachen wie in C, Pascal, Fortran, Basic & Co (auch "strukturierte" oder "prozedurale" Programmierung genannt), und das ist, wie schon angemerkt, Alteisen. 
- Und dann Sprachen, in denen Funktionen Variablen zugewiesen und als Funktionsargumente verwendet werden können, wie in Lisp, Erlang, Haskell, OCaml und F# - und diese Sprachen sind alles andere als uninteressant (insbesondere für parallele Verarbeitung)


----------



## Templon (10. Sep 2008)

Ach mist sry, falscher Thread


----------

