2017-11-02 1 views
1

Ich habe gewisse Zweifel, ob die im Code angegebene Methode korrekt ist oder etwas fehlt. Der Code läuft gut, aber ich denke immer noch, dass die Methode nicht geeignet ist. Es scheint einen Fehler zu haben. Hier ist der Code:Was ist falsch an der Methode dieses Codes?

// Java program to find an element x in a 
// sorted array using Exponential search. 

import java.util.Arrays; 

class Test 
{ 
    // Returns position of first ocurrence of 
    // x in array 
    static int exponentialSearch(int arr[], int n, int x) 
    { 
     // If x is present at firt location itself 
     if (arr[0] == x) 
      return 0; 

     // Find range for binary search by 
     // repeated doubling 
     int i = 1; 
     while (i < n && arr[i] <= x) 
      i = i*2; 

     // Call binary search for the found range. 
     return Arrays.binarySearch(arr, i/2, Math.min(i, n), x); 
    } 

    // Driver method 
    public static void main(String args[]) 
    { 
     int arr[] = {2, 3, 4, 10, 40}; 
     int x = 10; 
     int result = exponentialSearch(arr, arr.length, x); 

     System.out.println((result < 0) ? "Element is not present in array" : 
           "Element is present at index " + result); 
    } 
} 

Dies ist die Methode, die die Klasse zurückgibt. Fehle ich einige Definitionen?

+0

Sie sollten keinen Unterstrich vor dem privaten Variablennamen verwenden, es scheint, als ob Sie von Python wechseln. Was meinst du mit der Rückgabe der Klasse? – Sheshnath

+0

Nein Ich habe einen Fehler in der "Differenz" -Methode im obigen Code..aber ich bin nicht in der Lage es zu finden – SQEnthusiast

+0

Wählen Sie eine Namenskonvention und bleiben Sie dabei. Vorzugsweise die Standard-Java-Konvention. Ich würde empfehlen, Mitgliedervariablen auch nicht zu präfixisieren. –

Antwort

0

Ihre difference() Methode ist grundsätzlich logisch korrekt. Es wird eine neue OrdSetSimple mit den Elementen in s1 mit nicht in s2 erstellen.

Nehmen Sie jedoch das Beispiel unten.

s1 = [2, 3, 5] 
s2 = [3] 

Der resultierende Satz

result = [2, 5] 

Sie können zu sehen sein, dass die Größe des Ergebnisses 2 ist, während eine Größe von s2 1.

aus dem Code ist, legen Sie die Größe der resultierenden Menge als Größe von s2.

was dazu führen kann, dass nicht alle resultierenden Elemente zum Ergebnis hinzugefügt werden können.

versuchen, den Code zu

OrdSetSimple set = new OrdSetSimple(size1); 

, die die Größe von s1 verwenden ändern, da die Größe der Ergebnismenge oder kleiner als s1 gleich sein sollte.