Methoden Bestimmung an welche Methode eine andere Methode ihren Wert weitergeben soll

TheMenox

Aktives Mitglied
Guten Abend zusammen!
Ich hoffe, mir kann jemand bei meinem Problem helfen und bedanke mich schon malim Vorraus für jegliche Hilfe!

Ich habe heute angefangen Java zu lernen und wollte, um meine bisher erworbenen Kenntnisse (Hello World, Integer, Double, Methoden und Parameter) für mich selbst zu testen. Dabei bin ich auf ein kleines Problem gestoßen.
Ich habe mehrere Methoden, die ihren Wert an eine andere Methode weitergeben sollen, ihn aber - genau so wie die Methode, an die weitergegeben werden soll - nur an die main Methode weitergeben, was die ganze Sache etwas umständlich macht.

Ich werde die betreffende Klasse inklusive Kommentar hier anhängen, vielleicht hilft sie ja bei der Lösung des Problems.
 

Anhänge

Unterschied: Variable und Methode...

nur weil deine Variable heisst wie die Methode sind sie noch lange nicht miteinander verhängt...
 
Ich verstehe nicht, was du erreichen willst... Was verhängen?

Du könntest der Gesamtdifferenz 4 Parameter übergeben und dann die anderen 2 Methoden aufrufen. Aber schöner wirds dadurch auch nicht
 
Du meintest doch die wären nicht verhängt, deshalb meine frage wie man das macht.

Aber einfacher kann man das dann nicht machen?
 
Ich glaube wir reden aneinander vorbei. Was willst du tun?

Vereinfachen kannst du schon. GesamtalterA und GesamtAlterB sind ja das Selbe. also reicht einmal.

Java:
public static int totalAge(int a, int b) {
   return a+b;
}
public static int ageDiff(int a, int b) {
  return Math.abs(a-b); // Math.abs absolutwert der rechung also quasi |a-b|
}

System.out.println(ageDiff(totalAge(a,b), totalAge(c,d)));

so ein paar Zeilen, aber ohne zu sehen was du genau tun willst, kann ich dir nicht mehr helfen.
 
Was genau meinst du damit die Methoden geben ihren Wert nur an main zurück ???? Du hast drei Methoden die jeweils einen int-Wert zurückgeben. Und zwar an die Methode die sie aufruft. Das hat nix aber auch gar nix mit Vererbung, hierarchie oder sonst was zu tun !!
 
Ist ja gut, waren ja nur Spekulationen von jemandem der keine Ahnung davon hat.
Aber als ich versucht habe, zwei methoden von der anderen als der “main“ methode, per System.out.println aufzurufen, wurde mir zwar kein fehler angezeigt aber passiert ist auch nichts beim ausführen
 
Von welcher anderen denn ? Du hast dann aber diese "andere" schon in der main aufgerufen ?

Deine drei Methoden die du angehaengt hast tun alle was. Die eine bildet die Differenz zweier Zahlen und die beiden anderen bilden die Summe !! Und egal wo du sie aufrufst werden sie das entsprechende Ergebnis zurückliefern.
 
Von der methode “GesamtaltersDifferenzAundB“ (und ja an den ganzen Namen muss man noch mal arbeiten xD). Zu dem Zeitpunkt als ich das versucht hatte noch nicht, Nein
Wäre das denn ein Problem?
 
Klar wäre das ein Problem ! Irgendwas musst du ja aufrufen 🙂🙂🙂
Hast du den Code noch bei dem "nichts passierte". Falls ja dann poste ihn doch mal dann können wir an dem Beispiel den Fehler erklären. Und bitte nicht als Text-Datei anhängen sondern hier mit Code-Tags posten.
 
So, ich habe jetzt glaube ich erreicht, was ich wollte.
Nur eine Frage bleibt mir noch:
Warum muss ich in der "main" Methode den Integer "totAgeDiff" noch mal in Abhängigkeit von den anderen Integern angeben, der wird doch so von der Methode "totAgeDiff" zurückgegeben. Und die Methode "totAgeDiff" kann die Integer "totAgeA" und "totAgeB" ja auch als Variablen (ohne Abhängigkeit von A1, A2, B1, B2) aufrufen.

Aus " totAgeDiff(totAgeA(A1, A2), totAgeB(B1, B2) " würde ich gerne noch - wenn möglich - ein einfaches "totAgeDiff" machen, so wie mit "totAgeA" und "totAgeB" hier:
"System.out.println("Das Gesamtalter von Gruppe A ist " + totAgeA + " Jahre.");
System.out.println("Das Gesamtalter von Gruppe B ist " + totAgeB + " Jahre.");"
 

Anhänge

Code:
public static void main(String[] args) {
       
        int A1 = 18;
        int A2 = 30;
        int B1 = 12;
        int B2 = 25;
       
       
        System.out.println("Die Differenz zwischen dem Gesamtalter von Gruppe A und dem von Gruppe B ist " + totAgeDiff(totAgeA(A1, A2), totAgeB(B1, B2)) + " Jahre.");
    }
   
        public static int totAgeDiff(int totAgeA, int totAgeB) {
       
        System.out.println("Das Gesamtalter von Gruppe A ist " + totAgeA + " Jahre.");
        System.out.println("Das Gesamtalter von Gruppe B ist " + totAgeB + " Jahre.");   
           
        int totAgeDiff = totAgeA - totAgeB;
        return totAgeDiff;
        }
   
            public static int totAgeA (int A1, int A2) {
           
            int totAgeA = A1 + A2;
            return totAgeA;
           
            }
       
            public static int totAgeB (int B1, int B2) {
   
            int totAgeB = B1 + B2;
            return totAgeB;
       
            }
}
 
Ich glaube jetzt hab' ich's😀
Java:
public class PanjutorialsSkills1bis5 {

    public static void main(String[] args) {
      
        int A1 = 18;
        int A2 = 30;
        int B1 = 12;
        int B2 = 25;
      
      
        System.out.println("Die Differenz zwischen dem Gesamtalter von Gruppe A und dem von Gruppe B ist " + totAgeDiff(totAgeA(A1, A2), totAgeB(B1, B2)) + " Jahre.");
    }
  
        public static int totAgeDiff(int totAgeA, int totAgeB) {
      
        System.out.println("Das Gesamtalter von Gruppe A ist " + totAgeA + " Jahre.");
        System.out.println("Das Gesamtalter von Gruppe B ist " + totAgeB + " Jahre.");  
          
        int totAgeDiff = totAgeA - totAgeB;
        return totAgeDiff;
        }
  
            public static int totAgeA (int A1, int A2) {
          
            int totAgeA = A1 + A2;
            return totAgeA;
          
            }
      
            public static int totAgeB (int B1, int B2) {
  
            int totAgeB = B1 + B2;
            return totAgeB;
      
            }
}
 
Dein Überlegungen sind etwas kompliziert und undurchsichtig weil bei dir die Variablen so heissen wie die
Methoden und die Parameter genauso wie die Varibalen mit denen du die Methoden nachher aufrufst. Machs mal so :


Code:
public class PanjutorialsSkills1bis5 {

    public static void main(String[] args) {
   
        int AlterA1 = 18;
        int AlterA2 = 30;
        int AlterB1 = 12;
        int AlterB2 = 25;
   
   
        System.out.println("Die Differenz zwischen dem Gesamtalter von Gruppe A und dem von Gruppe B ist " + differenz(summe(AlterA1, AlterA2), summe(AlterB1, AlterB2)) + " Jahre.");
    }

    public static int differenz(int totAgeA, int totAgeB) {
   
        System.out.println("Das Gesamtalter von Gruppe A ist " + totAgeA + " Jahre.");
        System.out.println("Das Gesamtalter von Gruppe B ist " + totAgeB + " Jahre.");
       
        return Math.abs(totAgeA - totAgeB);
       
    }

    public static int summe (int A1, int A2) {
       
            return A1 + A2;

       
   }
   
}

Und was möchtest du ejtzt noch vereinfachen/ändern oder wie auch immer.
 
Das probiere ich gleich mal aus. erst mal noch ein paar Fragen:
1.)
die Variablen so heissen wie die
Methoden und die Parameter genauso wie die Varibalen
heißt das, die Parameter einer Methode müssen nicht so heißen wie die in der Methode benutzten Variablen, und für die Methode ist es nur wichtig, welchen Datentyp die Parameter (hier ja Integer) haben, und nicht wie man die dann benennt?

2.)
Müsste man dann nicht noch eine Methode anlegen, die "B1 + B2" zurückgibt?
Analog zu der hier:
public static int summe (int A1, int A2) {

return A1 + A2;


}

3.)
Woher weiß die Methode "differenz", dass "totAgeA" das gleiche wie "A1 + A2" ist?

Ich glaube das wars erst mal mit den Fragen dazu.
 
Ach ja, da war doch noch was 😀
4.)
Ich wollte ja hier
System.out.println("Die Differenz zwischen dem Gesamtalter von Gruppe A und dem von Gruppe B ist " + differenz(summe(AlterA1, AlterA2), summe(AlterB1, AlterB2)) + " Jahre.");
}
das "differenz(summe(AlterA1, AlterA2), summe(AlterB1, AlterB2))" durch die Variable "differenz" ersetzen, was ja nicht funktioniert hat. Kommt das daher, dass das gar keine Variable in dem Sinne wie ich sie benutzen wollte ist sondern ein unbestimmter Wert, der von 2 anderen, zunächst auch unbestimmten Werten, abhängig ist?
Das würde zumindest erklären, warum hier
System.out.println("Das Gesamtalter von Gruppe A ist " + totAgeA + " Jahre.");
System.out.println("Das Gesamtalter von Gruppe B ist " + totAgeB + " Jahre.");
"totAgeA und "totAgeB" so - ohne Abhängigkeit - benutzt werden können, da sie mit zwei von vornherein definierten Werten berechnet werden und somit auch als Wert weitergegeben werden können.

Edit:
müsste man der Methode "totAgeDiff" dann statt den beiden Parametern "totAgeA" und "totAgeB" dann die vier Integer, die in der main Methode definiert werden, als Parameter geben, damit das so funktioniert, wie ich mir das vorstelle?
 
Zuletzt bearbeitet:
1.)
heißt das, die Parameter einer Methode müssen nicht so heißen wie die in der Methode benutzten Variablen, und für die Methode ist es nur wichtig, welchen Datentyp die Parameter (hier ja Integer) haben, und nicht wie man die dann benennt?

Die Parameter einer Methode sollten einen Namen haben der genau verratet um was es sich bei dem Wert der Variable handelt.
Siehe nächste Antwort (summand1 und summand2).


2.)
Müsste man dann nicht noch eine Methode anlegen, die "B1 + B2" zurückgibt?
Analog zu der hier:

Nein deine Methode berechnet die Summe der beiden Parameter und lieferte die Summe zurück.
Die Namen der beiden Parameter deiner Methode "summe" sind einfach falsch gewählt. Bessere wäre "summand1" und "summand2".
Die Parameter dieser Methode haben nicht wirklich was mit deinen Variable "AlterA1" usw. zu tun.


3.)
Woher weiß die Methode "differenz", dass "totAgeA" das gleiche wie "A1 + A2" ist?

Weil du in deiner main-Methode folgendes stehen hast:
Java:
differenz(summe(AlterA1, AlterA2), summe(AlterB1, AlterB2))

Hier rufst du 2x die Methode "summe" auf. Die Rückgabewerte dieser beiden Aufrufe verwendest du gleich als Parameter für die Methode "differenz".
 
Zu Frage 4: es gibt keine Variable differenz ! Und was verstehhst du unter Abhängigkeit ? Was ist deiner Meinung nach von wem abhängig ? Du hast vier Variablen in deiner Main (A1, A2, B1, B2) und zwei Methoden summe() und differenz() die jeweils einen Wert zurückliefern. Und wenn du nun in einer Methode mit allen 4 Werten was rumrechenen willst dann musst du ihr natürlich alle vier Variablen beim Aufruf als Parameter übergeben !!
 
Bin schon dabei😀

Und die nächste Frage 😀 :

Java:
public static int totAgeDiff(int totAgeA, int totAgeB) {
    
            System.out.println("Das Gesamtalter von Gruppe A ist " + totAgeA + " Jahre.");
            System.out.println("Das Gesamtalter von Gruppe B ist " + totAgeB + " Jahre.");
        
            int totAgeDiff = Math.abs(totAgeA - totAgeB);
woher weiß die Methode hier welche Werte sie für totAgeA und totAgeB (im System.out.println) nehmen soll, wenn die zuständige Methode nur "totAge" heißt und mit allgemeinenWerten für "Age" rechnet?
Java:
public static int totAge (int Age1, int Age2) {
        
            int totAge = Age1 + Age2;
            return totAge;
liegt das nur daran, wie die Variablen in der main Methode benannt wurden, und das würde nicht gehen wenn man die bsp. C1 und C2 nennen würde?
 
Java:
public static void main(String[] args) {
      
        int A1 = 18;
        int A2 = 30;
        int B1 = 12;
        int B2 = 25;
      
        System.out.println("Das Gesamtalter von Gruppe A ist " + totAge(A1, A2) + " Jahre.");
        System.out.println("Das Gesamtalter von Gruppe B ist " + totAge(B1, B2) + " Jahre.");  
        System.out.println("Die Differenz zwischen dem Gesamtalter von Gruppe A und dem von Gruppe B ist " + totAgeDiff(totAge(A1, A2), totAge(B1, B2)) + " Jahre.");
Habe jetzt alle "System.out.println"s wieder in die main Methode verschoben, weil ich das doch schöner fand.
Zum vorherigen Post: Hier musste ich jetzt wieder die Variablen bei totAge angeben und konnte nicht einfach "totAgeA" und "totAgeB" sagen.
Das erscheint mir auch irgendwie logischer, als so, wie das vorher war.
 
woher weiß die Methode hier welche Werte sie für totAgeA und totAgeB (im System.out.println) nehmen soll, wenn die zuständige Methode nur "totAge" heißt und mit allgemeinenWerten für "Age" rechnet?

Beispiel:
Java:
public int addiere(int summand1, int summand2) {
    return summand1 + summand2;
}

Wie du die Parameter einer Methode nennst ist vollkommen egal. Welchen Wert der Parameter hat hängt davon ab mit welchen Wert du diese Methode aufrufst.

Java:
int summe1 = addiere(1, 2); // summe1 = 3
int summe2 = addiere(190, 210); // summe2 = 400

Beim 1.Aufruf hat summand1 den Wert 1, summand2 den Wert 2.
Beim 2.Aufruf hat summand1 den Wert 190, summand2 den Wert 210.
 
Das ist logisch, aber ich hatte die ja nicht mit einem Wert aufgerufen, sondern an den Namen der Methode einfach ein A bzw ein B angehängt.
Code:
public static int totAgeDiff(int totAgeA, int totAgeB) {

            System.out.println("Das Gesamtalter von Gruppe A ist " + totAgeA + " Jahre.");
            System.out.println("Das Gesamtalter von Gruppe B ist " + totAgeB + " Jahre.");
    
            int totAgeDiff = Math.abs(totAgeA - totAgeB);
Code:
public static int totAge (int Age1, int Age2) {
    
            int totAge = Age1 + Age2;
            return totAge;

Edit:
Wird an der Stelle dann aus der main Methode abgerufen, wie totAgeA und totAgeB definiert sind, auch wenn die totAge Methode da nicht mehr aufgerufen wird?

Edit2:
Ach ja, die wird ja da wohl aufgerufen...
 
Zuletzt bearbeitet:
Code:
public static int totAgeDiff(int totAgeA, int totAgeB) {

public static int totAge (int Age1, int Age2) {

Deine Methode "totAgeDiff" hat 2 Parameter mit dem Namen "totAgeA" und "totAgeB".
Diese beiden Parameter haben rein gar nichts mit der Methode "totAge" zu tun, außer einen ähnlichen Namen.
 
Java:
System.out.println("Das Gesamtalter von Gruppe A ist " + totAgeA + " Jahre.");
            System.out.println("Das Gesamtalter von Gruppe B ist " + totAgeB + " Jahre.");
Aber die Methode totAge rufe ich doch hiermit auf, oder nicht?

Edit:
Oder ist das auch wieder nur der Parameter?
 
Zuletzt bearbeitet:
Genau du verwendest hier deine beiden Parameter "totAgeA" und "totAgeB".

Ein Methodenaufruf ist leicht am Methodennamen und den darauf folgenden ()-Klammern zu erkennen (bzw. den übergebenen Parametern innerhalb der ()-Klammern).
 
Das sind die Parameter der Methode ! Und natürlich kannst du die in der Methode benutzen. Ganz egal von woher die Methiode aufgerufen wird
 

Zurück
Oben