2017-03-25 2 views
-3

Hallo Ich habe eine harte Zeit mit dieser Aufgabe. Kann mir bitte jemand sagen, warum meine Testnummer 5 immer noch wahr ist, wenn sie falsch ist. Vielen Dank.Java-Methoden und Array

Das ist die Frage.

Arrays - has12 & linearIn

  1. ein Array von ints gegeben, true zurück, wenn es eine 1 in der Anordnung mit einem 2 irgendwo später im Array ist.

  2. Gegeben sind zwei Arrays von Ints, sortiert in aufsteigender Reihenfolge, äußerer und innerer, geben wahr zurück, wenn alle Zahlen in innerem in äußerem erscheinen. Die beste Lösung macht nur einen einzigen "linearen" Durchlauf beider Arrays, wobei die Tatsache ausgenutzt wird, dass beide Arrays bereits in einer sortierten Reihenfolge sind.

Das ist mein Ausgang/Problem

Test 1: true 
Test 2: true 
Test 3: false 
Test 4: true 
Test 5: true//needs to be false 
Test 6: true 

Das ist mein Code

public class Problems { 
public static void main(String[] args) { 
    int[] a = {1,3,2}; 
    int[] b = {3,1,2}; 
    int[] c = {3,1,4,5}; 
    int[] d = {1,2,4,6}; 
    int[] e = {1,2,4,4,6}; 
    int[] f = {2,4}; 
    int[] g = {2,3,4}; 

    boolean test1 = has12(a); 
    boolean test2 = has12(b); 
    boolean test3 = has12(c); 

    System.out.println("Test 1: " + test1); //should print true 
    System.out.println("Test 2: " + test2); //should print true 
    System.out.println("Test 3: " + test3); //should print false 
    System.out.println("Test 4: " + linearIn(d, f)); //should print true 
    System.out.println("Test 5: " + linearIn(d, g)); //should print false 
    System.out.println("Test 6: " + linearIn(e, f)); //should print true 

} 

//has12 method goes here 

public static boolean has12(int[] array) { 
    int i; 
    int x; 

    for(x=0;x<array.length;x++){ 
     if(array[x]==1){ 
     } 
    for(i=x+1;i<array.length;i++){ 
     if (array[i]==2) return true; 
    }  
    } 
    return false; 
} 
    //linearIn method goes here 
    public static boolean linearIn(int[] outer, int[] inner) { 
     int i; 
     int j; 
    for (i = 0; i < inner.length; i++) { 
    for (j =0; j < outer.length; j++) { 
    if (outer[j] == inner[i]) return true; 

    } 

    } 
     return false; 

    } 
} 

Antwort

3

Problem, diesen Punkt kommen ist:

if (outer[j] == inner[i]) return true; 

Wenn es eine Übereinstimmung gibt, gibt die Funktion true zurück und es ist nicht das, was Sie wollen. Weil Sie alle Variablen des inneren Arrays überprüfen sollten.

  • Sie sollten für jede innere Variable isAppear boolean überprüfen.
  • Wenn es keine Übereinstimmung gibt, können Sie false zurückgeben.
  • Wenn eine Übereinstimmung besteht, überprüfen Sie weitere Variablen.
  • Wenn es keine Variable gibt und alles mit äußeren übereinstimmt. Sie können zurückgeben True.

Sie können dies versuchen:

public static boolean linearIn(int[] outer, int[] inner) { 
    boolean isAppear; 
    for (int i = 0; i < inner.length; i++) { 
     isAppear = false; 
     for (int j = 0; j < outer.length; j++) { 
      if (outer[j] == inner[i]) 
       isAppear = true; 
     } 
     if(!isAppear) 
      return false; 
    } 
    return true; 
} 
+0

Oh ok Gotcha! Vielen Dank für Ihre Hilfe! – livingundead

+0

Kein Problem, gut zu hören, helfen Ihnen. – ssorfonos