¿Cómo puedo evitar que la variable se actualice?

2020-06-30 java

El valor de la count sigue aumentando con cada ciclo (32-64-70, etc.). Pero necesito que el valor sea cero después de completar cada ciclo.

clase pública BinarySearchLecture {

 int count = 0;

int binarySearchLecture(int arr[], int l, int r, int x) {
   if (r >= l) { 
      int mid = l + (r - l) / 2; 
      count++;
      if (arr[mid] == x) 
      {
         count++;
         return mid; 
      }
      if (arr[mid] > x) 
      {  
         count++; 
         return binarySearchLecture(arr, l, mid - 1, x);
      }
      else  
      {  
          count++;
         return binarySearchLecture(arr, mid + 1, r, x); 
      }
   } else {     
      return -1;
   }
} 

    

}

import java.util.Random; clase pública FirstAssignment {

 // Driver method to test  
public static void main(String args[]) 
{ 
    BinarySearchLecture bs = new BinarySearchLecture(); 
    int arr[] = new int[65536];
    int n = arr.length; 
    
     
    for (int i = 0; i<n; i++) 
    {
         arr[i] = new Random().nextInt(10000000);
    }
    

    
    for (int i = 1; i <=3; i++)
    {

         int x = new Random().nextInt(10000000);
        System.out.println( i + "." + "Random search key: " + x );
    


    int result = bs.binarySearchLecture(arr, 0, n - 1, x); 
    if (result == -1) 
        System.out.println("Element not present"); 
    else 
        System.out.println("Element found at index " + result); 
    
         int count = bs.count; // count is an class variable
          
          System.out.println("Number of comparisons are " + count); 
    
     
        //  System.out.format("%32s%10d%16s", x , count , "presnt");
           

} }}

Answers

Su método binarySearchLecture está aumentando el valor de conteo.

También puede restablecerlo manualmente con un método de la clase como bs.resetCount () / bs.setCount (0) o algo como esto. Puede agregar esto a la clase bs que definió.

public class BinarySearchLecture {

int count = 0;
 int binarySearchLecture(int arr[], int l, int r, int x) {
   if (r >= l) { 
      int mid = l + (r - l) / 2; 
      count++;
      if (arr[mid] == x) 
      {
         count++;
         return mid; 
      }
      if (arr[mid] > x) 
      {  
         count++; 
         return binarySearchLecture(arr, l, mid - 1, x);
      }
      else  
      {  
          count++;
         return binarySearchLecture(arr, mid + 1, r, x); 
      }
   } else {     
      return -1;
   }
  }

void resetCount(){
  count = 0;
}
}

Entonces su código se vería más así:

 for (int i = 1; i <=3; i++)
{

     int x = new Random().nextInt(10000000);
    System.out.println( i + "." + "Random search key: " + x );



int result = bs.binarySearchLecture(arr, 0, n - 1, x); 
if (result == -1) 
    System.out.println("Element not present"); 
else 
    System.out.println("Element found at index " + result); 

     int count = bs.count; // count is an class variable
      
      System.out.println("Number of comparisons are " + count); 

 
    //  System.out.format("%32s%10d%16s", x , count , "presnt");
     
   bs.resetCount();
}

Otra solución no eficaz: cree una nueva instancia de la clase bs en cada bucle.

for (int i = 1; i <= 3; i++) {
  int x = new Random().nextInt(10000000);
  System.out.println(i + "." + "Random search key: " + x);

  bs = new BinarySearchLecture();

  int result = bs.binarySearchLecture(arr, 0, n - 1, x);
  if (result == -1){
    System.out.println("Element not present");
  }
  else {
    System.out.println("Element found at index " + result);
  }
    int count = bs.count; // count is an class variable

    System.out.println("Number of comparisons are " + count);
}

Related