Array TEst

Neue Frage »

Auf diesen Beitrag antworten »
neuling96 Array TEst

Implementieren Sie eine statische Methode findeSubarray(int[] werte, int[] subarray)
in Java, die zwei Integer-Arrays werte und subarray als Argument erh¨alt. Die Funktion soll testen,
ob das Array subarray im Array werte zusammenhangend vorkommt. Die Methode soll true
zur¨uckgeben, falls das Teilarray gefunden wurde, ansonsten false. Sie konnen davon ausgehen, dass
beide Arrays eine Lange von mindestens 1 haben.

ich hab das problem vereinfacht und angenommen
sei q element von int[] subarray
code:
1:
2:
3:
4:
5:
6:
public static  findeSubarray(int[] werte, int q )  
      (for(i=0;i<werte.length;i++) 
{if(werte[i] == q)) 
 {return true;}} 
else
 return  false;


Jetzt überprüft das Programm ob q in int[] werte.



Das Problem ist, dass int[] subarray aus mehreren Elementen besteht!

code:
1:
2:
3:
4:
5:
6:
public static  findeSubarray(int[] werte, int[] subarray, int m )
(for(i=0;i<werte.length;i++)
 {if(werte[i] == subarray[m]))  
{return true;}}
 else 
return  findeSubarray(int[] werte, int[] subarray, m++ );
 
Auf diesen Beitrag antworten »
eulerscheZahl

Mal was ganz anderes: wie schaffst du es, dass die Klammersetzung so überhaupt nicht passt?
Hast du keinen Compiler, um dein Werk zu testen? Dann würde ich an deiner Stelle damit anfangen.

Für nur eine Zahl sieht es ok aus (von den Klammern abgesehen).
Für mehrere Zahlen gibst du true zurück, wenn nur eine der Zahlen von subarray auch in werte vorkommt (angenommen, du startest bei m = 0). Außerdem geht das genauso gut iterativ (und der rekursive Ansatz ist immer langsamer).

Und so würde ich vorgehen:
Bsp.: werte = {1,2,3,1,2,3,4,1,2,3}, subarray = {2,3,4}
code:
1:
2:
3:
4:
5:
6:
werte     1 2 3 1 2 3 4 1 2 3
subarray  2 3 4 -> passt nicht, subarray weiterschieben
subarray    2 3 4 -> letzte Stelle passt nicht, weiter
subarray      2 3 4 -> weiter
subarray        2 3 4 -> weiter
subarray          2 3 4 -> TREFFER!

das subarray wird so lange weitergeschoben, bis es eine Übereinstimmung gibt oder man am Rand angekommen ist.
Auf diesen Beitrag antworten »
neuling96

public static findeSubarray(int[] werte, int[] subarray, int k )
int[] test= new [subarray.lenght];
test[k]=werte[k];
if (k>(werte.lenght-subarray.lenght))
return false;
else
return if (int[] test == int[] subarray)
return true;
else
reutrn findeSubarray(int[] werte, int[] subarray, int[] test,k++ )


Von der Idee:
für werte 1 2 3 1 2 3 4 1 2 3 und sei subarray 123
für int[] test und k =0 folgt
int int[] test=(1, 2, 3)

für k =1

int int[] test=(2 ,3 ,1)


Ja die Klammersetzung ist ein großes Problem für mich.. i
Auf diesen Beitrag antworten »
neuling96

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
public static boolean findeSubarray(int[] werte, int[] subarray, int k ){   
int[] test= new [subarray.lenght];{       
  for(int i=0; i<subarray.lenght; i++)      
test[i] =werte[k+i];
}
 if (k>(werte.lenght-subarray.lenght)) {   
return false;
}else {
return if (int[] test == int[] subarray) { 
return true; 
}else {
reutrn  findeSubarray(int[] werte, int[] subarray, int[] test,k++ );
}
 
Auf diesen Beitrag antworten »
eulerscheZahl

Da ist ja von der Syntax mehr falsch als richtig.
Was soll das hier sein?
code:
1:
2:
return if (int[] test == int[] subarray) { 
return true; 

nach return kommt kein if mehr, da kommt das, was du zurückgeben willst
int[] test hast du nur beim Erstellen der Variable, nicht beim Prüfen (das musst du wirklich für jeden Wert einzeln machen).
Hinzu kommen Schreibfehler wie reutrn oder lenght (statt length).
Die Rekursion wird so auch nicht funktionieren, weil du das k erst nach dem Aufruf inkrementierst.

Du machst jetzt folgendes: du installierst dir das JDK (Java Developers Kit).
Das bekommst du direkt von Oracle.
Anschließend nimmst du einen Texteditor (z.B. notepad++) und die Kommandozeile oder du holst dir direkt eine IDE (eclipse oder netbeans). Damit versuchst du dann, die Fehlermeldungen loszuwerden und das Programm auszuführen.

Wenn du nichts auf deinem Rechner installieren willst oder darfst, dann nimm einen Online Compiler.
Suche dazu einfach bei der Suchmaschine deines Vertrauens nach "java online compiler".

Aber ohne Syntaxprüfung und Compiler macht es wenig Sinn, eine Programmiersprache zu lernen.
Auf diesen Beitrag antworten »
neuling96

Code verbesser und als bouns ergänzt
falls array länge =0
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
public int findArray(int[] largeArray, int[] subArray) {

    int subArrayLength = subArray.length;

    if (subArrayLength == 0) {[CODE]
        return -1;
    }

    int limit = largeArray.length - subArrayLength;

    int i=0;

    for (int i = 0; i <= limit; i++) {
        if (subArray[0] == largeArray[i]) {
            boolean subArrayFound = true;

            for (int j = 1; j < subArrayLength; j++) {
                if (subArray[j] != largeArray[i+j]) {
                    subArrayFound = false;
                    break;
                }

            /* Sub array found - return its index */
            if (subArrayFound) {
                return i;
            }
        }
    }

    /* Return default value */
    return -1;
}


Von den grober Struktur müsste es stimmen, allerdings spukt der online Compiler immer noch error aus unglücklich
Auf diesen Beitrag antworten »
eulerscheZahl

aber es sieht schon viel besser aus Daumen hoch
Zeile 11: die kommt raus, da du das i in Zeile 13 erneut definierst
Zeile 22: da kommt ein '}' (von Zeile 17)

optional kannst du die Funktion noch als static deklarieren, dann lässt sie sich von der main aus aufrufen:
code:
1:
2:
3:
public static void main(String[] args) throws Exception {
    System.out.println(findArray(new int[]{1,2,3,1,2,3,4,1,2,3}, new int[]{2,3,4}));
}
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »