Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 02.12.2013
Сообщений: 28

Область видимости статичной переменной

22.03.2015, 19:07. Показов 1173. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Писал тут недавно программку, моделирующую алгоритм бинарного поиска. Всё получилось как я задумывал, кроме одной весчи... у меня переменная есть (static int iterations), обратите внимание, где она объявлена -> короче, суть в том, что она создана как счётчик, который показывает, сколько подходов нужно было провести, чтобы найти нужное нам число (1, в данном случае). Но на выходе получается, что нифига не итерируется (хотя итерации были проведены в методе binarySearch). какая-то фигня. Нечто подобное работает на С, но вот с Java не сработало. Взгляните на код.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import java.io.*;
 
class BinarySearchJava {
    static int lastNum = 1000;
    static int firstNum = 1;
    static int elements = lastNum - firstNum + 1;
    static int key = 1;
    static int[] mainArray = new int[elements];
    static int iterations = 0; //ТА САМАЯ ПЕРЕМЕННАЯ !!!!!!!!!!!!
    
    
    public static void main(String[] args){
        int number = firstNum;
        for(int i = 0; i < elements; i++){
            mainArray[i] = number;
            number++;
            //test of the exact elements
            //System.out.println("At index ["+i+"] is num "+mainArray[i]);
        }//end of for
        int rightIndex = binarySearch(firstNum, lastNum, key, mainArray);
        if (rightIndex == -1){
            System.out.println("There is no such number\n");
        } else {
            System.out.println("The KEY number "+mainArray[rightIndex]+" that was found in index ["
                               +rightIndex+"]\nAnd it took "+iterations+" iterations to find it");
        }
        
    }//end of main
    
    public static int binarySearch(int lBorderNumber, int uBorderNumber, int keyNumber, int[] array){
        int guessIndex = 0;
        int lowBoIndex = lBorderNumber -1;
        int upBoIndex = uBorderNumber -1;
        int iterations = 0;
        
        if(uBorderNumber < keyNumber || lBorderNumber > keyNumber){
            return -1;
        }
        
        while (array[guessIndex] < keyNumber){
            
            guessIndex = (lowBoIndex + upBoIndex)/2;
            System.out.println("Guess index: " + guessIndex + "\nGuess number: " +array[guessIndex]+
                               "\nKey Number: "+keyNumber);
            if(array[guessIndex]>keyNumber){
                upBoIndex = guessIndex + 1;
                System.out.println("We should search lower than in ["+guessIndex+"] number = "+array[guessIndex]);
                
            }else if(array[guessIndex]<keyNumber){
                lowBoIndex = guessIndex - 1;
                System.out.println("We should search higher than in ["+guessIndex+"] number = "+array[guessIndex]);
                
            }else{
                return guessIndex;
            }//else
            iterations++; //!!! СЧЁТЧИК!!! Должно быть +1 !!!!!!!!!!!
        }//while
        
        return guessIndex;
    }//binary search
}
Собственно выход такой:

The KEY number 1 that was found in index [0]
And it took 0 iterations to find it

Как я ни пробовал, ничего с этой переменной iterations не получается - счётчик не работает... Большая-большая печаль на сердце моём... И боль... Вот и думаю, что то с областью видимости тут, чего я так и не понял, пока что. Подскажите пожалуйста.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.03.2015, 19:07
Ответы с готовыми решениями:

Область видимости переменной
Вопрос наверняка детский, но я, как начинающий, не могу его решить (( Оператор сложения и сравнение в нижней части кода не видят...

Область видимости переменной
Здравствуйте! Возникла проблема с видимостью переменной и поэтому написал вот такой пример: import java.awt.Button; import...

Область видимости переменной в классе
Такая же проблема как и в https://www.cyberforum.ru/java-j2se/thread632396.html Я пишу тоже самое, но в метке почему-то не выводится...

4
185 / 160 / 49
Регистрация: 30.07.2013
Сообщений: 508
22.03.2015, 19:16
на сколько я понял ты iterations перекрываешь в методе binarySearch. т.е. локальной переменной перекрыл глобальную.
0
0 / 0 / 0
Регистрация: 02.12.2013
Сообщений: 28
22.03.2015, 19:37  [ТС]
УПС!!! На самом деле нет, это просто я не удалил после одной пробы, когда именно в методе binarySearch находится счётчик. Это просто ошибка, но "выход" всё равно не меняется. Ни при ошибке, ни при объявлении и вызове только в методе, ни при вот таком коде, который является ИСПРАВЛЕННОЙ ВЕРСИЕЙ ТОГО ЧТО ВЫШЕ
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import java.io.*;
 
class BinarySearchJava {
    static int lastNum = 1000;
    static int firstNum = 1;
    static int elements = lastNum - firstNum + 1;
    static int key = 1;
    static int[] mainArray = new int[elements];
    static int iterations = 0; //ТА САМАЯ ПЕРЕМЕННАЯ !!!!!!!!!!!!
    
    
    public static void main(String[] args){
        int number = firstNum;
        for(int i = 0; i < elements; i++){
            mainArray[i] = number;
            number++;
            //test of the exact elements
            //System.out.println("At index ["+i+"] is num "+mainArray[i]);
        }//end of for
        int rightIndex = binarySearch(firstNum, lastNum, key, mainArray);
        if (rightIndex == -1){
            System.out.println("There is no such number\n");
        } else {
            System.out.println("The KEY number "+mainArray[rightIndex]+" that was found in index ["
                               +rightIndex+"]\nAnd it took "+iterations+" iterations to find it");
        }
        
    }//end of main
    
    public static int binarySearch(int lBorderNumber, int uBorderNumber, int keyNumber, int[] array){
        int guessIndex = 0;
        int lowBoIndex = lBorderNumber -1;
        int upBoIndex = uBorderNumber -1;
        
        
        if(uBorderNumber < keyNumber || lBorderNumber > keyNumber){
            return -1;
        }
        
        while (array[guessIndex] < keyNumber){
            guessIndex = (lowBoIndex + upBoIndex)/2;
            System.out.println("Guess index: " + guessIndex + "\nGuess number: " +array[guessIndex]+
                               "\nKey Number: "+keyNumber);
            if(array[guessIndex]>keyNumber){
                upBoIndex = guessIndex + 1;
                System.out.println("We should search lower than in ["+guessIndex+"] number = "+array[guessIndex]);
                
            }else if(array[guessIndex]<keyNumber){
                lowBoIndex = guessIndex - 1;
                System.out.println("We should search higher than in ["+guessIndex+"] number = "+array[guessIndex]);
                
            }else{
                return guessIndex;
            }//else
            iterations++; //!!! СЧЁТЧИК!!! Должно быть +1 !!!!!!!!!!!
        }//while
        
        return guessIndex;
    }//binary search
}
0
185 / 160 / 49
Регистрация: 30.07.2013
Сообщений: 508
22.03.2015, 19:42
Лучший ответ Сообщение было отмечено Sanchellios как решение

Решение

у тебя просто не заходит в цикл
Java
1
while (array[guessIndex] < keyNumber)
1
0 / 0 / 0
Регистрация: 02.12.2013
Сообщений: 28
22.03.2015, 19:45  [ТС]
Вот же ж блин.... Точно!!! А я то думаю, что за паранормальная фигня!!! Спасибо)))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.03.2015, 19:45
Помогаю со студенческими работами здесь

Область видимости switch
Не могу понять как работает область видимости switch. У меня в каждом case будет обрабатываться данные и результат будет в виде...

Область видимости переменных в методе ограничивается границами цикла
помогите пожалуйста, не могу разобраться в области видимости переменных n и schak, задаю значения в цикле while, и дальше нужно эти...

Область видимости
Почему выпадает ошибка, что переменная scanner не инициализирована? По идее она не должна быть локальной в try. if (o...

Область видимости переменной
Запутался совсем. Есть переменная, которая внутри функции не отображается. $login = (empty($_POST))?&quot;&quot;:$_POST;//тут...

Область видимости переменной
Добрый день, подскажите пожалуйста почему переменная не видна. Пробывал так же использовать массив $GLOBAL Каким образом внутри функции...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru