Problem bei returnen eines Wertes

Diskutiere Problem bei returnen eines Wertes im Java Basics - Anfänger-Themen Bereich.
A

ava_corp

Hallo,

dies ist mein erstes Thema.

Schaut euch mal den Code an:
Java:
public static void main(String[] args)
    {
        int arrayEins[] = new int[5];
        arrayEins[1]=2;
        arrayEins[3]=18;
        arrayEins[0]=22;
        arrayEins[2]=21;
        arrayEins[4]=7;
        
        int b = 2;
        pruefung(arrayEins, b);
        ausgabe(arrayEins, b);
    }
    
    public static int pruefung(int aE[],int c)
    {
        if(aE[2]%aE[4] == 0)
        {
            c = 1;
            return c;
        }
        else
        {
            c = 0;
            return c;
        }
        
        
    }
    public static void ausgabe(int z[], int b)
    {
        
        
        for(int i=0; i< 5; i++)                            //oder for(i=0; i< z.length; i++)
        {
            System.out.println(z[i]);                    //oder System.out.println(z.length[i]);       
        }
        System.out.println("\nz[2] * z[1] = " + z[2] * z[1]);
        System.out.println("\nz[0] * z[3] = " + (double) z[0] / z[3]);
        
        switch(b)
        {
        case 0:
            System.out.println("5. Element ist kein Teiler vom 3. Element");
        break;
        case 1:
            System.out.println("5. Element ist kein Teiler vom 3. Element");
        break;
        }
        
        
    }
Unter der Methode pruefung wird ein Wert, c zugeordnet und wird der methode main zurückgegeben. Zu diesem zeitpunkt müsste ja int b den Wert 0 oder 1 haben.
Dieser wird dann an die methode ausgabe übergeben. Leider kommt dann für den Teil keine Ausgabe.
Ändere ich aber int b manuell zu 0 oder 1, funktioniert es.

Wer kann mir bei diesem Problem helfen?
Ich lerne Java erst gute 2 Wochen, also hoffe ich auf Nachsicht.
IDE ist Eclipse.

Vielen Dank
 
L

LimDul

Unter der Methode pruefung wird ein Wert, c zugeordnet und wird der methode main zurückgegeben. Zu diesem zeitpunkt müsste ja int b den Wert 0 oder 1 haben.
Der erste Satz ist wahr. Du gibst den Wert zurück. Aber der verpufft einfach. Warum soll er b zugeordnet werden? Dafür müsstest du schreiben:

Java:
        b = pruefung(arrayEins, b);
 
T

temi

Deine Methode gibt zwar einen Wert zurück, aber du machst nichts damit, z.B. int rueckgabe = pruefung(arrayEins, b);

Außerdem benötigt deine Methode den Wert c nicht als Parameter, denn c wird ja in der Methode gesetzt und wird auch anderweitig in der Methode nicht verwendet.
 
A

ava_corp

Also die Vorschläge habe geholfen. Der Code läuft jetzt, aber ich selbst verstehe es noch nicht so ganz. Aber das wird auch noch. :)

Vielen Dank an euch!
 
J

JustNobody

Evtl. hast Du einfach übersehen, dass Java bei Parametern immer nur den Wert übergibt. Das nennt sich Call by Value.

Somit wird bei einem Aufruf wie pruefung(arrayEins, b); lediglich die "Referenz auf das Array" sowie der Wert aus b übergeben.

Verwirrend ist, dass der Inhalt der Variable arrayEins eine Referenz ist. Somit wird bei Call by Value natürlich diese Referenz übergeben. Das bedeutet, dass du Inhalte im Array verändern kannst: Diese Änderungen siehst Du. Aber du kannst nicht die Variable selbst ändern.

Evtl. etwas bildlicher Erklärt: Sieh Variablen als Zettel an. Der Zettel, den Du "arrayEins" benannt hast, enthält eine Referenz, d.h. er enthält nur die Beschreibung, wo das Array zu finden ist. Und der Zettel, auf dem du "b" geschrieben hast, der enthält nur eine Zahl.
Der Methode gibst Du aber diese Zettel nicht sondern du gibst der Methode nur mit, was auf Deinem Zettel drauf steht. In der Methode hast Du jetzt eigene Zettel....

Was ist also passiert. "main" hat einen Zettel mit 2 drauf. "main" sagt zu "pruefung": 'Auf meinem Zettel steht 2'. "pruefung hat nun einen eigenen Zettel, auf den er den Wert 2 schreibt. Nun streicht "pruefung" diese 2 durch und schreibt statt dessen 0 oder 1 drauf. Dann verschwindet "pruefung" und nimmt natürlich seinen Zettel mit.... Damit steht auf dem Zettel von "main" weiterhin die 2 und natürlich nicht die 0 oder 1.

Was also fehlt ist am Ende, dass "pruefung" zu "main" sagt: Das Ergebnis ist 0 (oder 1) und "main" muss das notieren ... dieses notieren fehlte - bisher ignoriert "main", was "pruefung" zurück gibt.

War das etwas verständlich?
 
A

ava_corp

Das war jetzt wie eine Erleuchtung!

Vielen Dank, jetzt habe ich es verstanden und das Problem ist damit vom Tisch.:)
 
Thema: 

Problem bei returnen eines Wertes

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben