Klasse und Objekte

canyakan95

Bekanntes Mitglied
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?!
Java:
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:
Java:
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

Top Contributor
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

Bekanntes Mitglied
So habe set(int,int ) mal geändert:
Java:
	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:
Java:
	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

Top Contributor
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.
 
Zuletzt bearbeitet:

canyakan95

Bekanntes Mitglied
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

Top Contributor
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.
 
Zuletzt bearbeitet:

canyakan95

Bekanntes Mitglied
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.
 

Neue Themen


Oben