Methodenaufruf anderer Klasse

Gerlon

Aktives Mitglied
Guten Tag,

ich hänge zur Zeit an dem Problem das ich nicht wirklich weiß wie ich eine nicht statische Methode einer anderen Klasse richtig aufrufe. Schon ein paar Dinge versucht bisher ohne Erfolg.
Ich weiß das man ein Objekt braucht.

Java:
	public int kontoHinzufuegen(Konto neuKonto){
		if (kontoExistiert(neuKonto)== true){
			return -1;
		}
		else {
	konten.add(neuKonto);
	return neuKonto.getKontonummer();
		}

Das ist eine Methode in der Klasse Bank.

Diese möchte ich nun aufrufen ich habe vorher schon der Klasse Konto eine Kontonummer zugewiesen.
Welche diese Methode sich dann holt, hoffe ich zumindest.

Nun ist meine Frage wie rufe ich diese Methode "kontoHinzufuegen" in der Main einfach auf das sie mir den Wert ausgibt insofern das überhaupt stimmt was ich da bisher habe^^
 
mach ne Instanz von
Code:
Bank
und ruf darauf
Code:
kontoHinzufuegen
auf. Als Parameter übergibst du eine Instanz von
Code:
Konto
.
 
Vielleicht sieht ja jemand warum x hier = -1 ist
Habe vorher in einer anderen Methode nämlich eine Kontonummer hinzugefügt und versuche gerade diese dann wieder zu löschen, was bisher aber nicht funktioniert.

Vielleicht ist das adden doch falsch, bin mir nicht sicher, nur warum würde er wenn ich diese 2x ausführe -1 liefern und somit müsste das speichern ja funktioniert haben.

Java:
	public int kontoHinzufuegen(Konto neuKonto){
		if (kontoExistiert(neuKonto)== true){
			return -1;
		}
		else {
		
	konten.add(neuKonto);
	
	return neuKonto.getKontonummer();
		}
		
	}
bei der 1. Mehthode gibt er -1 wieder wenn er die Nummer schon gespeichert hat. Was funktionierte.
Bei der Löschen Methode aber findet er den Index dazu nicht.
Somit kommt immer False.

Java:
	public boolean kontoLoeschen(int kontonummer){
		
		
		
		int x = findeKontoIndex(kontonummer); // hier der Aufruf der -1 liefert
		
		if (x > 0){
		x= x -2;
		
		konten.remove(x);
		konten.remove(x+1);
		konten.remove(x+2);
		konten.remove(x+3);
		
			if ( findeKontoIndex(kontonummer) == -1) return true; System.exit(0);
		}
		return false;
}


	private int findeKontoIndex(int kontonummer){
		for(int i = 0;i<konten.size();i++){
			if(konten.get(i).getKontonummer() == kontonummer){
				return i;
			}
		}
		return -1;
	}
	}
 
Zuletzt bearbeitet:
Poste mal den gesamten Code.

Übrigens:
Java:
if ( findeKontoIndex(kontonummer) == -1) return true; System.exit(0);
Ist eine sehr verwirrende Schreibweise. Schreib das ganze lieber so:
Java:
if (findeKontoIndex(kontonummer) == -1) {
  return true;
}
else {
  System.exit(0);
}

wobei es viel mehr Sinn machen würde eine Exception zu schmeissen anstatt die ganze Application zu terminieren...
 
hatte sich alles schon geklärt
das war nur weil ich dachte der würde nachdem true noch false liefern da das ohne else war aber geht ja auch ohne
allgemein ist der Code da nicht annähernd mehr aktuell ^^
 
Habe mal etwas weiter gearbeitet an dem Programm und stoße mal wieder an meine Grenzen bezüglich einer Übergabe.
Damit möchte ich die in der oben erstellten Methode gespeicherten Objekte ausgeben.
In dem Fall nur die kontonummer und den nachnamen

Java:
	public String toString() {
		String x1="";
		String x2="";
		for ( int i = 0; i < konten.size();i++){
			x1=Integer.toString(konten.get(i).getKontonummer());
			//x = konten.get(i).getbesitzer(); 
			x2= x2 + "  " + x1;
		}
		return x2;
	}

Die klasse Konto sieht so aus. Diese Werte habe ich in einer Liste gepeichert.

Java:
public Konto(double kontostand, Person besitzer, int kontonummer,int bankleitzahl)

Klasse Person besitzt den Vor-und Nachnamen und den Nachnamen möchte ich ausgeben.
Leider weiß ich nicht wie ich nun da besitzer ja die Klasse Person verwendet das ausdrücken soll.
Vielleicht hat jemand auch noch eine Idee für eine bessere Speicherung in einen String, der sieht bisher nicht so schön aus aber funktioniert immerhin schon mal für die Kontonummern und hat auch erstmal nicht Priorität.
 
Zuletzt bearbeitet:
Vor- und Nachnamen hast du ja wahrscheinlich als private Variablen in deiner Personen-Klasse angelegt. Eine Getter-Methode in dieser Klasse kann dir die Namen liefern:

Java:
public String getVorname() {
  return vorname; // oder wie auch immer deine variable heißt
}

// das ganze analog dann für den nachnamen

Diese Methode kannst du jetzt auf einer Instanz deiner Personen-Klasse aufrufen:
Java:
String ergebnis = person.getVorname(); // wenn person eine Instanz einer Personen-Klasse ist

Den Rest solltest du dir selber zusammenbasteln können 🙂
 
hm da meint er er kann keinen statischen Aufruf bei einer nicht statischen Methode machen
Genauso muss ich das ja auch noch abhängig von der Liste machen, so wie bei der Kontonummer
Java:
private ArrayList<Konto> konten = new ArrayList<Konto>();
welche das ist
 
Zuletzt bearbeitet:
Verstehe ich nicht ganz. Du hast doch schon das jeweils richtige Konto Objekt. Dieses hat seinen Besitzer als Attribut (Person Objekt). Da braucht doch die Konto Klasse nur eine Getter Methode die das Person Objekt return't.
 
Habs hinbekommen, danke an Alle.
Hatte einfach zu kompliziert gedacht ^_^ Liegt ja eigentlich auf der Hand 😉
 
Zuletzt bearbeitet:
Eine Frage hätte ich aber noch ist zwar nicht passend zum Thema aber vielleicht hilft mir ja trotzdem jemand
Warum funktionieren returns bei Bedingungen nicht?

ich habe zum Beispiel eine Methode welche diese beiden Bedingungen überprüft und ein Boolean Wert returnen soll!
Damit ist ja alles abgedeckt warum will er trotzdem noch ein return Wert wenn er zu diesem eigentlich nie kommt, habe den einfach gesetzt aber an sich ist dieser ja Sinnlos.

Java:
if ( x < 0) return false;

Java:
if (absender.getKontostand() == x && empfaenger.getKontostand() == y) return true;
 
Und wie macht man das sonst, heißt das es fehlt noch eine Bedingung oder soll ich das einfach so lassen habe einfach nach den Bedingungen return false gemacht
dadurch funktionierte bisher eigentlich alles
 
Java:
	public boolean ueberweisen(Konto absender,Konto empfaenger,double betrag){
		double x = absender.getKontostand();
		double y = empfaenger.getKontostand();
		x = x - betrag;
		if ( x < 0) return false;
		absender.setKontostand(x);
		
		y = y + betrag;
		empfaenger.setKontostand(y);
		
		
		if (absender.getKontostand() == x && empfaenger.getKontostand() == y) return true;
		
		return false;
	
	}

ich könnte wahrscheinlich einfach die 2. Bedingung weglassen und return true machen aber fand das irgendwie besser, mit einer Überprüfung.
 
Zuletzt bearbeitet:
der soll ich das einfach so lassen habe einfach nach den Bedingungen return false gemacht
Grundsätzlich ist nichts verkehrt daran, einen Default Rückgabewert zu definieren.
In Deinem Fall könnte, wenn es sonst keine anderen Fälle zu berücksichtigen gibt eine Zeile ausreichen:
Java:
return x >=0 && absender.getKontostand() == x && empfaenger.getKontostand() == y;
 
Das Problem war warum ich 2 genommen habe, das er ja die Überweisung dann nicht machen soll.
Es sollte ja kein negativer Wert auf dem Konto vorhanden sein. Und wenn ich am Ende nur überprüfe ob die Überweisung korrekt war,so wie du sie geschrieben hast, hat er die Werte ja trotzdem geändert.
Da lag mein Problem.

Aber mit dem return anstatt der Bedingung war gut.

habs jetzt so gemacht
oben der ergibt nachwievor false so spar ich mir einen return wert.
dieser ergibt ja immer true
Java:
return absender.getKontostand() == x && empfaenger.getKontostand() == y;
 
Zuletzt bearbeitet:

Zurück
Oben