Erste Schritte Lösen dieser Aufgabe, Hilfe!

dan1996

Aktives Mitglied
Hallo, ich lerne für meine Klausur doch eine Aufgabe bereitet mir Schwierigkeiten
wie würdet ihr diese Aufgabe per Hand Lösen?
a) Beschreiben Sie den Rückgabewert der Methode wasPassiert in Abhängigkeit vom Parameter a.
b) Wie lautet die Ausgabe des Programmfragments?

Java:
static int wasPassiert(int[] a) {
          int[] b = new int[a.length];
          for (int i=0; i<a.length; i++)
            b[i] = a[i];
          for (int j=1; j<b.length; j++) {
            int k = b[j],
            i = j-1;
            while (i>=0 && b[i]>k) {
                  b[i+1] = b[i];
                  i--;
            }
            b[i+1] = k;
        }
          int c = 0;
          for (int i=0; i<b.length-1; i++)
            if (b[i+1]-b[i]>c) c = b[i+1]-b[i];
      return c;
    }
   
    public static void main(String[] args){
        int[] a = {0,4,6,0,1,8,13};
        System.out.println("("+wasPassiert(a)+")");
    }
 
Wie sind denn deine Überlegungen dazu? Dann kann man dazu mal konkret Bezug nehmen, ob das passt oder nicht.

Irgendwas musst du dir ja schon überlegt haben 😉
 
wie würdet ihr diese Aufgabe per Hand Lösen?
Im Prinzip kannst Du das natürlich wirklich Anweisung für Anweisung durchgehen. Ich mache das etwas anders: teile und herrsche.

Dazu schaue ich mir zuerst an, welche "Schritte" die Methode ausführt, ggf. gehe ich dabei von inneren Blöcken nach außen. Das ist eine Art Refactoring, so dass ich dann weiß, wofür welcher "Schritt" gut ist. Damit muss ich nicht mehr jede Iteration einzeln durchgehen.

Übertragen auf Dein Beispiel, wird ganz am Anfang das Array kopiert. Folglich muss ich die for-Schleife nicht mehr Iteration für Iteration per Hand durchspielen, sondern weiß sofort, dass b eine Kopie von a ist.
 
B ist eine Kopie von A, aber was danach geschieht, sowie die Programmfragmentlogik, erschließt sich mir noch nicht, weil es ja zum Teil nicht richtig formatiert. 🙁

Tipp: Mit einer IDE funkt Code Identation automatisch. 😀
 
Zuletzt bearbeitet von einem Moderator:
Ich würde mal behaupten, dass das Programm nicht mal kompiliert, da das i in i = j-1; vorher nicht initialisiert wurde. (i ist nur die lokale Variable der Kopier-Schleife, in der "Arbeitsschleife" ist der Variablenname dagegen j).
 
hmm, ich würde mich hier auch @dzim anschließen 🙁

Müsste doch so ausschauen, oder nicht??
Java:
static int wasPassiert(int[] a)
{
    int[] b = new int[a.length];

    for (int i=0; i<a.length; i++)
        b[i] = a[i];

    for( int j=1; j<b.length; j++ )
    {
        int k = b[j], i = j-1;
        while( i>=0 && b[i]>k )
        {
             b[i+1] = b[i];
             i--;
        }
        b[i+1] = k;
    }

    int c = 0;
    for (int i=0; i<b.length-1; i++)
    {
        if( b[i+1] - b[i]>c)
        {
            c = b[i+1]-b[i];
        }
    return c;
}

public static void main(String[] args)
{
    int[] a = {0,4,6,0,1,8,13};
    System.out.println( "(" + wasPassiert(a) + ")" );
}

VG Klaus
 
Why wird eigentlich immer so viel von jedem behauptet? Ich denke, ich weiß vielleicht bis nachher, "wasPassiert". 😀
 

Zurück
Oben