Локальная переменная

 
 
 
Сообщения:6
Переделал код, чтобы countNum стало локальной переменной. Однако, получается так, что countNum сохраняет свое изначальное значение без изменений. Может кто-нибудь подсказать, каким образом можно сделать так, чтобы в данной ситуации countNum стало расти при заданных условиях?
 public double calculate(int size, int count) {
        int countNum = 0;
        for (int turn = 1; turn<=count; turn++) {
            simulation(size, turn, countNum);
        }
        return ((double) countNum/count)*100.0;
    }

    public void simulation(int size, int turn, int countNum) {
        Random rnd = new Random();
        rnd.setSeed(turn);
        int[] birthdays = new int [size];
        for (int i = 0; i<size; i++) {
            birthdays[i] = rnd.nextInt(364);
        }
        for (int j = 0; j<size; j++) {
            for (int k = j + 1; k<size; k++) {
                if (birthdays[j] == birthdays[k]) {
                     countNum = countNum + 1;
                     return;
                }
            }
        }
    }
 
 
Сообщения:127
В Java нет передачи переменной по ссылке, как например в C#. Переменная всегда передается по значению. Т.е. в твоем случае ты передал не ссылку на переменную, а копию значения хранимую ей.
Изменен:28 авг 2020 12:33
 
 
Сообщения:6
Я недавно начал заниматься программированием и java мой первый язык. Не подскажешь, как я могу изменить последовательно саму переменную countNum?
 
 
Сообщения:127
Присвоить переменной возвращаемое методом значение
    countNum = simulation(size, turn, countNum);

А из метода simulation вернуть нужное значение в нужном месте.
 
 
Сообщения:6
Dilettante, спасибо большое, очень выручил!
 
 
Сообщения:127
Я не разбирался в логике твоего кода но по сути твоего вопроса должно быть что то типо этого
    public double calculate(int size, int count) {
        int countNum = 0;
        for (int turn = 1; turn<=count; turn++) {
            countNum = simulation(size, turn, countNum);
        }
        return ((double) countNum/count)*100.0;
    }

    public int simulation(int size, int turn, int countNum) {
        Random rnd = new Random();
        rnd.setSeed(turn);
        int[] birthdays = new int [size];
        for (int i = 0; i<size; i++) {
            birthdays[i] = rnd.nextInt(364);
        }
        for (int j = 0; j<size; j++) {
            for (int k = j + 1; k<size; k++) {
                if (birthdays[j] == birthdays[k]) {
                    countNum = countNum + 1;
                }
            }
        }
        return countNum;
    }
Изменен:28 авг 2020 14:18
 
 
Сообщения:6
Dilettante, от души, миллион благодарностей!!
 
 
Сообщения:127
Извиняюсь. Неправильно высказал свой первый ответ. Надеюсь никого в заблуждение не ввел.
Dilettante:
В Java нет передачи переменной по ссылке, как например в C#. Переменная всегда передается по значению. Т.е. в твоем случае ты передал не ссылку на переменную, а копию значения хранимую ей.


В Java нет передачи переменной по ссылке примитивного типа, как например в C#. Переменная примитивного типа в Java всегда передается по значению. Т.е. в твоем случае ты передал не ссылку на переменную, а копию значения хранимую ей.
Изменен:29 авг 2020 15:12
 
 
Сообщения:6
Dilettante, спасибо за пояснение. Теперь хотя бы понимаю, что я пытался сделать) Кстати, если интересно, вот код, который в итоге прошел автоматическое тестирование курса, который я сейчас изучаю:
public double calculate(int size, int count) {
        int countNum = 0;
        for (int turn = 1; turn<=count; turn++) {
            countNum = simulation(size, turn, countNum);
        }
        return ((double) countNum/count)*100.0;
    }


    public int simulation(int size, int turn, int countNum) {
        Random rnd = new Random();
        rnd.setSeed(turn);
        int[] birthdays = new int [size];
        for (int i = 0; i<size; i++) {
            birthdays[i] = rnd.nextInt(365);
        }
        for (int j = 0; j<size; j++) {
            for (int k = j + 1; k<size; k++) {
                if (birthdays[j] == birthdays[k]) {
                     return ++countNum;
                }
            }
        }
        return countNum;
    }
 
Модераторы:frymock
Сейчас эту тему просматривают:Нет