Objekt erstellen und speichern

Roydebatzen

Mitglied
Hallo,

ich frage mich, wie ich aus sowas:
Java:
Klasse[] klasse = new Klasse[2];
klasse[1] = new Klasse(1,2);

dann wieder direkt etwas als das Objekt erstelle, in etwa so:
Java:
klasse[1]="hier steht ein Text, der die Zahlen 1 und 2 beinhaltet."

Ich will nämlich aus den eingegeben Zahlen etwas berechnen und dann in einem String zurückgeben.

Danke Roy
 
Äh ja... hä?

Was genau willst du machen? In ein Array vom Typ Klasse kannst du keine Strings legen.
 
Der Typ Klasse könnte aber eine toString(); Methode besitzen, der eben das ausgibt.

Java:
klasse[1].toString();

würde dann tun, was du willst.

[EDIT]öhm bzw. ein Setter ala
Java:
klasse[1].setWasAuchImmer("String mit 1 und 2 ...");
egal wie, es hängt wohl an deinem Typ Klasse ^^[/EDIT]

Gruß Vanny
[TIPP]Versuche mal Klassen als solche zu erkennen, ohne sie "Klasse" zu nennen.
Vergib lieber aussagekräftige namen zBsp. "ZahlenContainer" oder so und noch besser gleich nen englischen ala "NumberContainer".
Irgendwann hast du Klasse1 und Klasse2 und und und... da schaut dann nie wieder jemand durch.[/TIPP]
 
Zuletzt bearbeitet von einem Moderator:
Äh ja... hä?

Was genau willst du machen? In ein Array vom Typ Klasse kannst du keine Strings legen.

@EikeB: ich glaube er spielt darauf an, dass das Objekt von "Klasse" (also die Instanz) zwei Attribute beinhalten soll...

Dann einfach zwei Objekt-Variablen innerhalb von "Klasse" deklarieren und Werte im Konstruktor zuweisen...
 
...einfach zwei Objekt-Variablen innerhalb von "Klasse" deklarieren und Werte im Konstruktor zuweisen...

Das ist mit Vorsicht zu genießen.
Dann macht er seine Member public und gewöhnt sich nen schlechten Stil an.
Am besten ist gleich per Methode zu arbeiten um Ihn an die DatenKapselung zu gewöhnen.

Gruß Vanny

hier mal ein hoffentlich erhellendes Beispiel:
Java:
public class NumberContainer {
	
	private int firstValue; // erster Zahlenwert, hier int
	private int secondValue; // zweiter Zahlenwert, auch int
	
	//SetterMethoden um die Werte aus dem Konstruktor zuzuweisen
	private void setFirstValue(int value){
		this.firstValue = value;
	}
	
	private void setSecondValue(int value){
		this.secondValue = value;
	}
	
	//nun also der Konstruktor
	public NumberContainer(int firstValue, int secondValue){
		setFirstValue(firstValue);//hier wird der übergebene Wert zugewiesen
		setSecondValue(secondValue);//the same ^^
	}
	
	//und eine Methode um an deinen Satz zu kommen
	public String getTheString(){
		return ("Das ist der String mit " + this.firstValue + " und " + this.secondValue + " im Satz.");
	}
	
	
	//hier folgt nun die praktische Anwendung der Geschichte
	public static void main(String[] args) {
		NumberContainer[] numberContainerArray = new NumberContainer[2];
		numberContainerArray[0] = new NumberContainer(1, 2);
		numberContainerArray[1] = new NumberContainer(7, 8);
		
		System.out.println(numberContainerArray[0].getTheString());
		System.out.println("und");
		System.out.println(numberContainerArray[1].getTheString());
	}

}
 
Zuletzt bearbeitet von einem Moderator:
Ich will euch zeigen, was ich meine:

Java:
import java.util.*;

class TestPrices {

  static Random random = new Random(12345);

  public static void main(String[] args) {
    int n;
    try {
      n = Integer.parseInt(args[0]);
    } catch (ArrayIndexOutOfBoundsException e) {
      Out.println("Aufruf: TestPrices Arraygroesse");
      return;
    } catch (NumberFormatException e) {
      Out.println("n muss ganze Zahl sein");
      return;
    }
    Prices[] a = new Prices[n];
    for (int i = 0; i < a.length; ++i) {
      Out.print("Bitte Menge und Preis eingeben: ");
      a[i] = new Prices(In.readInt(), (int) (In.readDouble() * 100 + 0.5));
    }
    Out.println();
    Out.println("Vor Sortieren:");
    SomeUtilities.print(a);
    SomeUtilities.selectionSort(a);
    Out.println();
    Out.println("Nach Sortieren:");
    SomeUtilities.print(a);
  }

}

Java:
class SomeUtilities {

  static void selectionSort(Prices[] a) {
    // muss ergaenzt werden
  }

  // fuer e) darf eine weitere Selection Sort Methode ergaenzt werden.

  static void print(Prices[] a) {
    for (Prices p: a) {
      Out.println(p);
    }
  }

}

Dieses p was in SomeUtilities ausgegeben wird, ist ja eine Element des Arrays aus a.
Dieses Element, wird aber weiter oben initialisiert durch 2 Zahlen.
Nun will ich während ich den Konstruktor erstelle, in dieses Feld(a) den String schreiben.
Also ungefähr so:

Java:
public class Prices{

public Prices(int z1, int z2){
this.variable1=z1;
this.variable2=z2;

toString(int z1,int z2)//Eine Methode die es in einen Sting umwandel
//Wie kommt jetzt aber der String wieder raus aus dem Konstruktor in das jeweilige a[i]?

}
}

Noh etwas, ich darf weder Prices noch SomeUtilities verändern(also etwas löschen).
 
Die toString() Methode deiner Price Klasse ist murks.
Die bei dir z.b. so ausschauen:
Java:
public String toString() {
  return variable1 + " " + variable2;
}
(Ich hoffe du hast die Variablen in deiner Klasse angelegt, und nur vergessen die hier zu posten...

//Wie kommt jetzt aber der String wieder raus aus dem Konstruktor in das jeweilige a?

Was meinst du damit? Ich habs oben schon erwähnt: In ein Array vom Typ Price kannst du keine Strings stecken.
 
Achso natürlich, ich habe meine toStringmethode gar nicht gepostet.

Aber ich muss da irgendwie einen String reinstecken, das ist die Aufgabe.
Oder seh ich das falsch, die Ausgabe aus SomeUtilities ist doch eine Kopie eines Arrayfeldes aus Prices.
Die Frage bleibt, wie bekomme ich in dieses Pricesobjekt(nicht das Array) durch aufrufen eines Konstruktors einen String.
 
Zuletzt bearbeitet:
Du musst da keinen String "reinstecken". Die Stringrepräsentation des Objekts ergibt sich doch aus den Werten des Objekts. Wenn du die toString() Methode richtig implementiert ist reicht dir folgender Code in der print Methode:
Java:
for (Price p : a) {
  System.out.println(p);
}
 
Hi,

ich versteh deine Sprache nicht ganz, trotzdem klingt es iwie richtig.
Also ich will eine Stringrepräsentation anstelle des Objekts, um so das Feld a welches gleich p ist als String zu haben.

Ich versteh nicht, wie sich das aus den Werten des Objekts ergibt.

Da ich es nicht verstanden habe, aber denke das es iwie richtig ist, frag ich jetzt mal gegen:

Wenn ich dort wo ich den Methodenaufruf der toStringmethode geschrieben habe, danach dann eine lebende Stringvariable mit meinem gesuchten Text habe, dann hat die ja die Adresse wie, a.string
jetzt will ich aber in Wirklichkeit a=string
da ja a kopiert wird auf p
und dann ausgegeben wird,
kann das aber nicht machen, da ich ja gar kein richtiges a habe.


Oder meinst du es ist egal das die Adresse a.string ist und es wird trotzdem ausgelesen?
Dann müsste ich nurnoch alle anderen Adressen raushalten und nur a.string übergeben und wäre ferdsch
 
Zuletzt bearbeitet:
Kleines "toString()"-Tutorial. Versuch' mal folgendes KSKB, es sollte dir zeigen, wie eine gut durchdachte [c]<Object>.toString()[/c] Methode arbeitet.
Java:
public class ToStringTut
{
  private final Object outVar;

  private ToStringTut(Object var)
  {
    outVar = var;
  }

  public static void main(String[] args)
  {
    for(int n = 0; n < 100; n++) {
      System.out.println(new ToStringTut(n));
    }
  }

  @Override
  public String toString()
  {
    return "outVar ist " + outVar.toString() + ".";
  }
}
Demnach müsstest du in deiner Price-Klasse lediglich die Preise als Member speichern und in einer entsprechend überschriebenen "toString()" Methode bei der Ausgabe berücksichtigen.
 
Eclipse sagt das dein Beispiel nicht funktioniert.

Aber auch da ist wieder der richtige Ansatz,da ich ja wirklich was überschreiben will.

Nur bin ich jetzt immernoch nicht weiter.
 
Dein Eclipse soll sich nicht so einpfeiffen XD... Der Code ist für Java V5+ vollkommen in Ordnung (Obwohl: Das kleine "o" von "@Override" ist inzwischen verbessert). 😉
Na was soll's... vllt. probierst mal folgende Price-Klasse (natürlich die etwas günstigere :lol🙂
Java:
public class Prices
{
	private int variable1, variable2;

	public Prices(int z1, int z2)
	{
		this.variable1=z1;
		this.variable2=z2;
	}

	@Override
	public String toString()
	{
		return "Price: " + variable1 + "; " + variable2;
	}
}
 
Zuletzt bearbeitet von einem Moderator:

Zurück
Oben