Объявление переменной в BinarySearch - PullRequest
2 голосов
/ 13 октября 2019

Я работаю над Java-проектом BinarySearch . Я пытаюсь создать и инициализировать переменную mid, которая найдет среднее значение, но это дает мне ошибку, что вы не можете объявить переменную здесь. Я также попробовал это с разделенной декларацией, но это не сработало. Вот мой кусок кода:

 public static boolean binarySearch(int[] data, int target, int low, int high){
        if(low>high)
            return false;
        else
            int mid=(low + high )/2;
        if(target==data[mid]);
            return true;
        else if(target<data[mid])
            return binarySearch(data, target, low, mid - 1);
        else
            return binarySearch(data, target, mid + 1, high);


    }

Что я должен сделать, чтобы решить эту проблему?

Ответы [ 3 ]

1 голос
/ 13 октября 2019

когда вы объявляете переменную в блоке, вы не можете получить к ней доступ из блока, вам следует декальцировать переменную из if и изменить ее в if, тогда, когда вы обращаетесь к ней с помощью target==data[mid] theПрограмма будет знать, где его взять. например:

public static boolean binarySearch(int[] data, int target, int low, int high){
    int mid;
    if(low>high)
        return false;
    else
        mid=(low + high )/2;
    if(target==data[mid]);
        return true;
    else if(target<data[mid])
        return binarySearch(data, target, low, mid - 1);
    else
        return binarySearch(data, target, mid + 1, high);


}

для получения дополнительной информации о области переменных: Область переменных в Java

0 голосов
/ 13 октября 2019

Вы сделали две ошибки здесь.

  • Сначала вы должны объявить переменную mid в начале, так как она используется и в других областях (не только в остальном).
  • Во-вторых, вам нужно удалить точку с запятойздесь if(target==data[mid]);. Поскольку он завершает строку.

Код после устранения этих проблем,

public static boolean binarySearch(int[] data, int target, int low, int high){
  int mid;
  if (low > high)
    return false;
  else
    mid = (low + high) / 2;
  if (target == data[mid])
    return true;
  else if (target < data[mid])
    return binarySearch(data, target, low, mid - 1);
  else
    return binarySearch(data, target, mid + 1, high);
}
0 голосов
/ 13 октября 2019

Проблема в том, что вы объявляете его внутри else, который немедленно выходит за пределы области действия, и значение теряется

Вы можете избежать этой проблемы, объявив ее за пределами этой области (перед оператором if)или удалив остальное

if(low>high)
    return false;
int mid=(low + high )/2;
...