Frage von leonardomessi, 47

such algorithmus problem?

public static int find42(int[]a){
    for(int i=0;i<a.length;i++){
        if(a[i]==42){
            System.out.println("a["+i+"]");
        }
    }
    System.out.println("nicht gefunden");
        return 0;
}

public static void main(String[]args){
    int []b= {41,44,55,42,56,412,428};
    System.out.println(find42(b));
    
}

}

also bei der aufgabe sollen alle Indizes ausgegeben werden, die den wert 42 enthalten und es soll "nicht gefunden" ausgegeben werden wenn im ganzen array nichts gefunden werden kann und das klappt bei mir nicht

Antwort
von sarahj, 32

er gibt halt immer "nicht gefunden" aus, auch wenn was da war.
Wie wär's wenn Du Dir irgendwie merken würdest, daß da was war?

Außerdem gibt er 0 zurück, was dann in main ausgegeben wird. Was soll das? Besser wäre wohl das erste i oder die Anzahl gefundener indizes als returnwert (bei letzterem kann dann die Ausgabe "nichts gefunden" auch dort erfolgen)

Kommentar von leonardomessi ,

ich weiß dass er das immer ausgibt aber weiß nicht wie das anders gehen soll.. help me!!

Kommentar von sarahj ,

bool gefunden = false;

if (...) {
   gefunden = true;
}
if (! gefunden) print (nichts gefunden)

so schwer ist das ja wohl auch nicht ;-D

Kommentar von leonardomessi ,

bist ein held, manchmal ist es viel zu einfach, dass man nicht daran denkt!

Kommentar von sarahj ,

Danke - aber zu Held/Heldin gehört mehr... ;-D

Antwort
von hummelxy, 9

Hallo leonardomessi,

dass sieht mir doch ganz nach Java aus... ;-)

1. Macht es keinen Sinn, dass deine Methode "find42()" einen Wert zurückgibt, wenn du direkt in der Methode den Text ausgibst. Gebe doch lieber die Anzahl der gefundenen 42er zurück? Wenn du immer 0 zurückgibst, ist das absolut unnötig - und Ressourcenverschwendung, auch wenn nur minimal. Oder du machst die Methode zu void, dann kannst du fast alles so lassen, brauchst aber keine Rückgabe.

2. Ist es Quatsch, eine Methode in System.out..ln() aufzurufen, wenn die Methode selbst die Textausgabe regelt. Du solltest nur Methoden in System.out..ln() aufrufen, die einen Wert zurückgeben, den du direkt auf der Konsole ausgeben möchtest.

3. Deine eckigen Klammern bei der Array-Deklaration gehören nicht an den Arraynamen, sondern an den primitiven Datentyp. Eigentlich sollte das obige Snippet einen Compilerfehler erzeugen.

Siehe:

int[] b= {41,44,55,42,56,412,428};

4. Dein Code funktioniert nicht, weil du nach deiner for-Schleife immer die Ausgabe "nicht gefunden" angibst. Der Compiler arbeitet dein Programm von oben nach unten ab; wenn die Schleife das Array fertig durchlaufen hat, dann wird System.out..ln() immer aufgerufen!

Da du anscheinend gerade in der Anfangsphase der Programmierung bist, helfe ich dir gerne weiter, indem ich dir ein besseres Snippet zur Verfügung stelle, welches auf deinem basiert, aber meine obigen Punkte mit eingebaut hat. Ich hoffe, du versuchst die Fehler zu finden und daraus zu lernen - und nicht stur zu kopieren und einzufügen. Viel Erfolg weiterhin! ;-)

public static void finde42(int[] array){

boolean merker = true;

for(int i=0; i<a.length; i++){
if(array[i] == 42){
merker = false;
System.out.println("Stelle: " + i + " = 42");
}
}

if(merker) {
System.out.println("Array besitzt keine 42!");
}
}

public static void main(String[]args){
int[] dein_Array = {41, 44, 55, 42, 56, 412, 428};
finde42(dein_Array);
}

Hummelxy

Kommentar von hummelxy ,

Natürlich muss die Zälanweisung in der Schleife array.length() heißen!

Keine passende Antwort gefunden?

Fragen Sie die Community