Arraynamen an andere Klasse übergeben für allg. Rechnung

Morphastian

Mitglied
Hallo,
ich möchte nicht lange drumrumreden. Folgendes Problem:

Wir sind momentan dabei einen Rechner für ein Spiel zu programmieren (mit GUI). Jedenfalls kann der User per JTextfields gewisse Zahlen eintragen, die sollen dann nach einem bestimmten Schema berechnet werden. Ich habe eine Klasse für die GUI und eine Klasse, die die Berechnung von Werten übernehmen soll. Folgende Codeausschnitte sind relevant:
GUI-Klasse
Java:
	public final JFormattedTextField spioInput = new JFormattedTextField();
	public final JFormattedTextField spioAufschlag = new JFormattedTextField();
	public final JFormattedTextField feOutput = new JFormattedTextField();
	public final JFormattedTextField naqOutput = new JFormattedTextField();
	public final JFormattedTextField deuOutput = new JFormattedTextField();

        public void ...

			public void SS() {
				try {
					long a = Long.parseLong(spioInput.getText());
					int b = Integer.parseInt(spioAufschlag.getText());
					new Schiffe(a, b, "SS");
					feOutput.setText(Long.toString(rechnungen.Schiffe.Feee));
					naqOutput.setText(Long.toString(rechnungen.Schiffe.Naaa));
					deuOutput.setText(Long.toString(rechnungen.Schiffe.Deuuu));
				} catch (Exception e) {
					e.printStackTrace();
				}
			}

Ich habe diese Klasse stark gekürzt und auf ein Beispiel beschränkt. Es gibt jedenfalls mehrere Typen von Schiffen, die in dieser Klasse an die Rechnerklasse übergeben werden.

Nun hier kommt das eigentliche Problem:
Schiffe
Java:
public long _SS[] = new long[] { 550, 0, 360, 1, 1, 1 };
public static long Feee, Naaa, Deuuu;

public Schiffe(long menge, int aufschlag, String typ) {
		if (typ.equals("SS")) {
			Feee = (menge * _SS[0]) + (((menge * _SS[0]) * aufschlag) / 100);
			Naaa = (menge * _SS[1]) + (((menge * _SS[1]) * aufschlag) / 100);
			Deuuu = (menge * _SS[2]) + (((menge * _SS[2]) * aufschlag) / 100);
		}
		if (typ.equals(...

Ich habe ein Array, iIn diesem Fall _SS[], welches mit Werten befüllt ist. Wie im Beispiel zu erkennen, sind nur die ersten 3 Werte des Arrays relevant. Jedoch habe ich mehrere "Typen" die berechnet werden sollen, es ist jedes Mal die gleiche Rechnung. Besteht irgendwie eine halbwegs schöne Möglichkeit, eine "allgemeine" Rechnung zu schreiben, den Namen des Arrays aus der GUI zu übergeben, um dann von 60 Zeilen Codeberechnung wegzukommen? Es soll quasi aus der GUI der Typ übergeben werden und in die Rechnung eingefügt werden. Sprich an Stelle von "_SS[.." soll der übergebene Wert automatisch eingefügt werden.
In etwa dann sowas:
Java:
Feee = (menge * TYP[0]) + (((menge * TYP[0]) * aufschlag) / 100);
Naaa = (menge * TYP[1]) + (((menge * TYP[1]) * aufschlag) / 100);
Deuuu = (menge * TYP[2]) + (((menge * TYP[2]) * aufschlag) / 100);

Simples Problem, aber irgendwie stehen wir auf dem Schlauch. Den String an sich einzusetzen bringt nicht viel, da eine Multiplikation von String und long kollidiert.

Ich hoffe jemand kann uns bei diesem Problem helfen. Danke schon mal.

Gruß
 
Ist denn Begriffe wie Vererbung/Interfaces bekannt? Wenn ich die Anforderung richtig verstanden habe liese sie sich mit einem Interface oder einer abstrakten Klasse lösen.
 
Ist jetzt blöd, weil du nur so einen kleinen Ausschnitt hergibst, aber ich würde die Typen in ein enum verwandeln und die enums haben noch dazu dein _SS gespeichert. Also ein Enum mit Feldern(in deinem Fall ein Array).

Sowas wie:

Java:
enum Typ {
   PI(Math.PI), E(Math.E);

   double value;

   private Typ(double value) {
      this.value = value;
   }

   public double getValue() {
      return value;
   }

}

/* Erschieß mich nicht, aber ich habs jetzt einfach so reingetippt, also keine Garantie. */


[EDIT]Da geb ich Michael... recht[/EDIT]
 
Arrays haben keine Namen (Variablen haben welche).
Warum übergibst du der Methode nicht das Array selbst (Parameter vom Typ [c]long[][/c])?
 
Danke für die schnellen Antworten.

@Michael... - Selbst mit Interfaces hätten wir doch im Grunde das selbe Problem erneut oder sehe ich das jetzt so falsch?

@Flown - Gute Idee, wir werden das auf jeden Fall als nächstes versuchen.

@tfa - Haben wir bereits versucht, jedoch gab es da Probleme bei der Übergabe. Sämtliche Werte nahmen stets null an. GUI wurde jeweils bei der Übergabe an Schiffe() angepasst und in der Schiffe.java dies natürlich auch. Wenn du uns da eventuell Hilfestellung geben könntest wäre das echt super.


Eigentlich ist dieses Thema schon ein wenig peinlich, aber wir haben uns momentan wirklich festgefahren..
 
Ich meine

Java:
public long _SS[] = new long[] { 550, 0, 360, 1, 1, 1 };
public static long Feee, Naaa, Deuuu;
 
public Schiffe(long menge, int aufschlag, String typ) {
        if (typ.equals("SS")) {
            Feee = (menge * _SS[0]) + (((menge * _SS[0]) * aufschlag) / 100);
            Naaa = (menge * _SS[1]) + (((menge * _SS[1]) * aufschlag) / 100);
            Deuuu = (menge * _SS[2]) + (((menge * _SS[2]) * aufschlag) / 100);
        }
        if (typ.equals(...

kann ersetzt werden durch

Java:
public long _SS[] = new long[] { 550, 0, 360, 1, 1, 1 };
public static long Feee, Naaa, Deuuu;
 
public Schiffe(long menge, int aufschlag, long[] factorArray) {        
            Feee = (menge * factorArray[0]) + (((menge * factorArray[0]) * aufschlag) / 100);
            Naaa = (menge * factorArray[1]) + (((menge * factorArray[1]) * aufschlag) / 100);
            Deuuu = (menge * factorArray[2]) + (((menge * factorArray[2]) * aufschlag) / 100);
}
(Von der Sinnhaftigkeit der statischen Variablen mal abgesehen...).


Der Constructor wird dann eben so aufgerufen: [c]new Schiffe(1234L, 6789, _SS);[/c].
Mehr kann man mit diesem Beispielcode nicht machen.
 
Danke tfa und auch an die Anderen. Mit ein wenig Frickelei hats gepasst. So wie tfa es vorgeschlagen hat, hatten wir es auch, ist halt nur sehr schlau, wenn man die Variablen mit null initialisiert und sich dann wundert, dass sie null annehmen. Also wirklich bescheidene Arbeitsweise bei uns.

Problem ist jedenfalls erledigt, danke nochmal 🙂
 

Neue Themen


Zurück
Oben