Сохранение переменной при многократном обращении к методу - PullRequest
0 голосов
/ 12 декабря 2018

Мне нужно это, чтобы распечатать «N1», а затем «N2» в случайном порядке.Моя проблема в том, что я не знаю, как сохранить значения (num и num2), чтобы они не печатали одно и то же число дважды.Я не знаю, как сохранить значение для следующего использования метода.Любая помощь приветствуется:)

import java.util.Random;
public class Testing {
    public static void main(String[] args) {
        System.out.println(random());
        System.out.println(random());
    }
    public static String random() {
        Random rgen = new Random();
        int rNumber;
        int num = 0, num2 = 0;

        do {
            rNumber = rgen.nextInt(2) + 1;
        } while ((rNumber == 1 && num == 1) || (rNumber == 2 && num2 == 1));

        if (rNumber == 1) {
            num = 1;
            return "N1";
        }
        else if (rNumber == 2) {
                num2 = 1;
            return "N2";
        }
        else
            return null;
    }
}

Ответы [ 4 ]

0 голосов
/ 12 декабря 2018

Ваше состояние здесь } while ((rNumber == 1 && num == 1) || (rNumber == 2 && num2 == 1)); всегда ложно.Вы не присвоили num и num1 новое значение после инициализации.Кроме того, может быть, вы хотели что-то подобное?

package com.testing;
import java.util.Random;
public class Testing {
    private static int num = 1, num2 = 2;

    public static void main(String[] args) {
        for(int i =0; i < 30; i++) {
            System.out.println(random());
        }
    }

    public static String random() {
        Random rgen = new Random();
        int rNumber = rgen.nextInt(2) + 1;
        if (rNumber == 1) return "N1";
        else if (rNumber == 2) return "N2";
        else return null;
    }
}
0 голосов
/ 12 декабря 2018

Чтобы сохранить что-либо за пределами области функций, либо верните его, передайте следующему вызову, либо используйте статическую переменную:

public class Testing {
    public static int store = 0;
    /* your code*/
}

Доступ к этой переменной можно получить, как и к любой другой переменной, но это не так.потерять свою ценность.Когда-либо.Его можно только изменить.

Но гораздо более простым решением будет:

public static void random() {
    System.out.println(Math.random() < 0.5 ? "N1\nN2" : "N2\nN1");
}
0 голосов
/ 12 декабря 2018

Для этого задания вы должны создать две глобальные переменные num1 и num2 (переменные, объявленные вне области действия любой функции).Поскольку ваша функция random () является статической, поэтому желательно использовать статическую глобальную переменную.Глобальные переменные не сбрасываются и сохраняют свои значения, пока функция не изменит их значения.

0 голосов
/ 12 декабря 2018

Я думаю, вы имеете в виду, что вы хотите сохранить значения num и num2.Удалите их объявления из random() и поместите их на уровне класса до main():

private static int num = 0;
private static int num2 = 0;

, иначе этот цикл:

do {
    rNumber = rgen.nextInt(2) + 1;
} while ((rNumber == 1 && num == 1) || (rNumber == 2 && num2 == 1));

не имеет смысла, так какусловие:

((rNumber == 1 && num == 1) || (rNumber == 2 && num2 == 1))

всегда будет false.

...