2017-11-02 7 views
1

コードに記載されているメソッドが正しいかどうか不明な点があります。コードはうまく動作しますが、私はまだこのメソッドが適切ではないと思います。バグがあるようです。コードは次のとおりです。このコードのメソッドで何が問題になっていますか?

// 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); 
    } 
} 

これはクラスを返すメソッドです。私はいくつかの定義が欠けていますか?

+0

プライベート変数名の前にアンダースコアを使用しないでください。これは、Pythonから切り替えるようです。 クラスを返すことは何を意味しますか? – Sheshnath

+0

いいえ、私は上記のコードの "差異"メソッドのバグがあります。しかし、私はそれを見つけることができません – SQEnthusiast

+0

命名規則を選んでそれに固執します。好ましくは、標準のJavaの規約です。私はプレフィックスメンバ変数の習慣にも反対することをお勧めします。 –

答えて

0

difference()の方法は基本的には論理的に正しいです。新しいOrdSetSimpleが作成され、s1の要素はs2にありません。

ただし、以下の例を考えてください。

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

あなたは、結果の大きさは、S2の大きさは、あなたのコードから1

ている間、あなたのサイズを設定し、2であることがわかります

result = [2, 5] 

ことが結果セットs2のサイズとして結果セットの

OrdSetSimple set = new OrdSetSimple(size2); 

この結果、すべての結果の要素を結果に追加できなくなる可能性があります。結果セットのサイズが等しいか、S1よりも小さくなければならないよう

は、S1のサイズを使用

OrdSetSimple set = new OrdSetSimple(size1); 

にコードを変更してみてください。

関連する問題