# Klasse und Objekte



## canyakan95 (5. Jun 2015)

Hallo meine Aufgaben waren: Die Klasse Ints besitzt Konstruktoren und weitere Methoden, die hier aber nicht verwendet werden sollen.
Vervollständigen Sie die Klasse Ints um die folgenden zusätzlichen Methoden:
• [1 Punkt] void set( int index, int val ) setzt den Wert im Feld numbers am Index index auf
den Wert val, falls der Index gültig ist. Sonst geschieht nichts.
• [1 Punkt] int count( int val ) gibt die Häufigkeit zurück, mit der der Wert val im Feld numbers
auftritt.
• [1 Punkt] void substitute( int oldVal, int newVal ) ersetzt im Feld numbers jedes Vorkommen
des Wertes oldVal durch den Wert newVal.

Folgendes habe ich gemacht und das sollte auch soweit so gut richtig sein?!

```
public class Ints {

	private int [] numbers;
	
	public void set (int index,int val)
	{
		if(index>=0 && index<numbers.length)
		{
			for(int i=0;i<numbers.length;i++)
			{
				numbers[index]=val;
			}
		}
	}
	public int count (int val)
	{
		int quantity=0;
		for(int cand: numbers)
		{
			if(numbers[cand]==val)
			{
				quantity++;
			}
		}
		return quantity;
	}
	public void substitute(int oldVal, int newVal)
	{
		for(int i=0;i<numbers.length;i++)
		{
			if(numbers[i]==oldVal)
			{
				oldVal = newVal;
			}
		}
		
	}
}
```

Als nächstes sollte ich folgdes machen: Die Klasse Storage besitzt als Attribut ein Feld der aus Aufgabenteil a) bekannten Klasse Ints.
Die Klasse Storage besitzt auch Konstruktoren und weitere Methoden, die hier aber nicht verwendet
werden sollen. Vervollständigen Sie die Klasse Storage um zwei Methoden.
Beachten Sie bei den Lösungen, dass eine Referenz nicht immer auf ein Objekt verweisen muss.
• [2 Punkt] boolean contains( int p ) gibt true zurück, falls der Wert von p mindestens einmal in
den in values abgelegten Werten vorkommt. Sonst wird false zurückgegeben.

Ich habe folgendes gemacht aber das will iwie nicht klappen:

```
public class Storage2 {
	private Ints[]values;
	
	public boolean contains(int p)
	{
		for(Ints cand : values)
		{
			if(values[cand]==p)
			{
				return true;
			}
		}
		return false;
	}

}
```
Mein  fehler liegt in der zeile (values[cand]==p) , aber ich weis nicht warum..Hoffe ihr könnt mich korriegieren.
Mfg


----------



## Tobse (5. Jun 2015)

Zunächst mal: Der Trheadtitel ist unpassend Gewählt. In Java dreht sich alles um "Klassen und Objekte". Wähle in Zukunft bitte aussagekräftigere Titel, wie z.B. "Hausaufgabe zu Arrayoperationen".

Zu der Klasse Ints:
Deine Implementation von _count(int)_ ist richtig. Die von _set(int, int)_ und _substitute(int, int)_ nicht:

_set(int, int)_ setzt alle Zahlen *ab* dem Index _index_ auf _val_, nicht nur die Zahl an dem Index. Vielleicht findest du selbst heraus, warum.

_substitude(int, int)_ bewirkt rein garnichts. _oldVal_ ist ein eingabeparameter und der wird mit _oldVal = newVal_ überschrieben. Das überschreibt aber den Parameter, nicht den Wert im Array. Hier findest du vllt auch raus, warum.

Zu Storage:



> Ich habe folgendes gemacht aber das will iwie nicht klappen


Und warum nicht? Welche Fehlermeldung bekommst du? Der Compiler sowie die JRE sagen dir immer sehr Präzise, was nicht funktioniert hat. Du *musst* lernen, diese FEhlermeldungen zu nutzen ansonsten kommst du beim Programmieren keinen Meter weit.
Die Schleifen, die du in _contains(int)_ verwendest können garnicht funktionieren. Dein Array-Zugriff _values[cand]_ ist völlig Sinnlos: Schau dir nochmal an, wie Arrays und Indizes funktionieren.


----------



## canyakan95 (5. Jun 2015)

So habe set(int,int ) mal geändert:

```
public void set (int index,int val)
	{
		for(int i=0;i<numbers.length;i++)
		{
			if(i>index)
			{
				numbers[i]=val;
			}
		}
	}
```
Bei substitute habe ich jetzt folgendes:

```
public void substitute(int oldVal, int newVal)
	{
		for(int i=0;i<numbers.length;i++)
		{
			if(numbers[i]==oldVal)
			{
				numbers[i]= newVal;
			}
		}
		
	}
```

Bei der contains() methode weiß ich leider nicht wie ich das dort machen soll.Hoffe du kannst mir das bitte zeigen.
Die Fehlermeldung lautet: "Ints cannot converted to int"


----------



## Tobse (5. Jun 2015)

_substitute(int, int)_ ist jetzt richtig  _set(int, int)_ noch nicht. Warum hast du denn da ein _>_ genommen?

Diese Schreibweise: _for(Variablen-Typ variablen-Name : Array) { ... }_ bewirkt, dass für jedes Element im Array der Code in den Geschweiften Klammern ausgeführt wird. Und für jedes Element im Array hat die angegebene Variable den Wert des Arrayelements.
Bei dir steht jetzt: _for(Ints cand : values)_. Das Beduetet: _cand_ ist vom Typ _Ints_. Und der Code in den geschweiften Klammern wird für jedes Element aus _values_ (wobei _cand_ das Element ist), ausgeführt.
In der Schleife greifst du dann auf _values[cand]_ zu. Ein Arrayzugriff benötigt ein _int_ als Index; ein Objekt vom Typ _Ints_ (genauer: eine Referenz darauf) ist etwas ganz anderes. Deshalb versucht Java, den Wert von _cands_ von einem _Ints_ in ein _int_ zu konvertieren. Das geht nicht, daher die Fehlermeldung.


----------



## canyakan95 (6. Jun 2015)

Hey
was würdest du denn für contains() vorschlagen, wie ich das ändern sollte.
Außerdem habe ich da ein ">" genommen weil , ab dem Index das verändern werden sollte.
Mfg


----------



## Tobse (6. Jun 2015)

Bzgl _set(int, int)_: Habe ich die Aufgabenstellung nicht verstanden?


> [1 Punkt] void set( int index, int val ) setzt den Wert im Feld numbers *am* Index index auf
> den Wert val, falls der Index gültig ist. Sonst geschieht nichts.



Bzgl. _contains(int)_:
Ich könnte dir jetzt sagen, was die Lösung ist. Aber dann lernst du nichts dabei 
Das _for(Ints cand : values) {_ ist auf jeden fall richtig.
Tipp: _Ints_ braucht auch eine _contains(int)_-Methode.


----------



## canyakan95 (6. Jun 2015)

Hey 
Wollte nur hinzufügüen, dass das ne klausuraufgabe ist und ich keine methoden hinzufügen kann, sondern nur mit dem auskommen muss, was angegeben ist.


----------



## Flown (6. Jun 2015)

Wärst du so freundlich und könntest die Klausur mit hochladen?


----------



## canyakan95 (6. Jun 2015)

Anhang anzeigen 7858
Anhang anzeigen 7859


----------



## Harry Kane (6. Jun 2015)

Tobse hat gesagt.:


> Tipp: _Ints_ braucht auch eine _contains(int)_-Methode.


Nochn Tipp: Ints hat bereits eine count(int) Methode.


----------



## Tobse (6. Jun 2015)

Harry Kane hat gesagt.:


> Nochn Tipp: Ints hat bereits eine count(int) Methode.



Das hab ich nicht gesehen 
@TE: Damit kannst du genau das gleiche erreichen.


----------



## Flown (6. Jun 2015)

Die Anhänge funktionieren nicht.


----------

