Метод get не передаёт значения переменной

92
19 апреля 2021, 21:20

Есть два класса: Main и Cycles. Из класса Cycles методом get() должно передаваться значение переменной SecSycles в класс Main в переменную MainCycle, но её значение почему-то всегда остаётся равным 1. Вот сама часть кода:

public class Cycles {
    public int SecCycle = 1;
    public float getSecCycle() {
        return this.SecCycle;
    }
}
public class Main {
    float MainCycle = 1;
    Cycles YesNo = new Cycles();
    MainCycle = YesNo.getSecCycle();
}

Дело в том, что у меня уже был аналогичный рабочий код, но сейчас мне понадобилось добавить еще один класс, и это значение сначала передается в еще один класс, а потом в Main. Может, проблема связана с этим?

Дополнено: полный код. В классе Cycles переменной SecCycle должно присваиваться значение 2, которое потом передается в класс Money, а из него - в Main. Знаю, что это относительно громоздко и искренне надеюсь на то, что код будет понятен.

public class Main {
    public static void main(String[] args) {
        float MainCycle = 1;
        Scanner sc = new Scanner(System.in);
        Cycles YesNo = new Cycles();
        Money Balance = new Money();
        Card Visa = new Card();
        Visa.Insert();
        Visa.PIN();
        do {
            System.out.println("Выберите действие:\n1 - просмотр баланса карты;\n2 - снять средства со счёта;\n3 - пополнить счёт.");
            int choose = sc.nextInt();
            if (choose == 1) {
                Balance.Check();
                MainCycle = YesNo.getSecCycle();
            }
            else if (choose == 2) {
                Balance.Withdraw();
                MainCycle = YesNo.getSecCycle();
            }
            else if (choose == 3) {
                Balance.Deposit();
                MainCycle = YesNo.getSecCycle();
            }
            else System.out.println("Ошибка. Введите верное число: ");
        } while (MainCycle == 1);
    }
}
public class Money {
    public int CardBalance = 2351820;
    public int ATMBalance = 754560;
    private Scanner sc = new Scanner(System.in);
    Cycles CycleCheck = new Cycles();
    Cycles CycleWithdraw = new Cycles();
    Cycles CycleDeposit = new Cycles();
    public void Check() {
        System.out.println("Баланс Вашей карты: " + CardBalance + " рублей.\nЖелаете продолжить? Y/N");
            CycleCheck.YN();
    }
    public void Withdraw() {
        boolean cycle = true;
        System.out.println("Выберите, сколько Вы хотите снять:");
        while (cycle) {
            int withdraw = sc.nextInt();
            if (withdraw > CardBalance)
                System.out.println("Ошибка: на балансе недостаточно средств, чтобы снять данную сумму. Введите корректную сумму:");
            else if (withdraw > ATMBalance)
                System.out.println("Ошибка: в банкомате недостаточно средств, чтобы снять данную сумму. Введите корректную сумму:");
            else {
                System.out.println("Вы сняли " + withdraw + " р. Желаете продолжить? Y/N");
                CardBalance = CardBalance - withdraw;
                cycle = false;
                CycleWithdraw.YN();
            }
        }
    }
    public void Deposit() {
        boolean cycle = true;
        System.out.println("Выберите, на сколько Вы хотите поплнить баланс:");
        while (cycle) {
            int deposit = sc.nextInt();
            if (deposit > 1000000)
                System.out.println("Сумма пополнения не должна превышать 1 000 000. Пожалуйста, внесите верный депозит:");
            else {
                CardBalance = CardBalance + deposit;
                System.out.println("Вы пополнили баланс на "+deposit+" р. Желаете продолжить? Y/N");
                cycle = false;
                CycleDeposit.YN();
            }
        }
    }
    public class Cycles {
        private boolean cycle = true;
        private String cont;
        public int SecCycle = 1;
        Scanner sc = new Scanner(System.in);
        public float getSecCycle() {
            return this.SecCycle;
        }
        public void YN () {
            while (cycle) {
                cont = sc.nextLine();
                if (cont.equalsIgnoreCase("N")) {
                    SecCycle = 2;
                    System.out.println("Спасибо за работу. Хорошего дня!");
                    break;
                }
                else if (cont.equalsIgnoreCase("Y")) {
                    SecCycle = 1;
                    cycle = false;
                } else System.out.println("Ошибка. Введите верное выражение: ");
            }
        }
    }
    public class Card {
        Scanner sc = new Scanner(System.in);
        public void Insert() {
            boolean cycle=true;
            System.out.println("Здравствуйте. Введите номер карты:");
            while (cycle) {
                String CardNumber = sc.nextLine();
                String[] subCardNumber;
                String delimeter = "-";
                subCardNumber = CardNumber.split(delimeter);
                if (subCardNumber.length != 4 || subCardNumber[0].length() != 4 || subCardNumber[1].length() != 4 || subCardNumber[2].length() != 4 || subCardNumber[3].length() != 4)
                    System.out.println("Ошибка. Введите верный номер карты:");
                else {
                    System.out.println("Верный номер карты.");
                    cycle = false;
                }
            }
        }
        public  void PIN() {
            boolean cycle = false;
            int wrongPIN=0;
            System.out.println("Введите PIN-код:");
            while (!cycle) {
                Scanner sc = new Scanner(System.in);
                int PIN=1111;
                int InsertPIN = sc.nextInt();
                if (InsertPIN == PIN) {
                    System.out.println("Добро пожаловать.");
                    cycle = true;
                } else if (wrongPIN == 0) {
                    System.out.println("Ошибка. Неверный PIN-код.");
                    wrongPIN++;
                    System.out.println("Осталось 2 попытки.");
                } else if (wrongPIN == 1) {
                    System.out.println("Ошибка. Неверный PIN-код.");
                    wrongPIN++;
                    System.out.println("Осталась 1 попытка.");
                } else if (wrongPIN == 2) {
                    System.out.println("Вы ввели неверный PIN-код 3 раза. Ваша карта была заблокирована.");
            }
        }
    }
}
Answer 1

Так у вас значение поля в самом классе равно 1, вот его вы и видите. Либо передавайте значение в конструкторе, либо измените в классе.

UPD: Все дело в том, что у вас создаётся два экземпляра класса Cycles в MainClass и в Money. Соответственно все правильно что он вам возвращает 1. Вам следует разобраться с "мешаниной" между классами и тогда все будет работать.

READ ALSO
Не работает удалённый сервис

Не работает удалённый сервис

В программе есть 1 интерфейс и 2 класса:

96
Удаление элементов из List<Integer> через Stream

Удаление элементов из List<Integer> через Stream

Дано - входящий List<Integer>По нему нужно пройтись через Stream, если сумма всех чисел чётная - удалить все чётные

91
Как в java hibernate создать колонку в бд, если она остутсвует

Как в java hibernate создать колонку в бд, если она остутсвует

Проблема вот в чёмУ меня есть класс

95
Пишу клиент-серверное приложение, от сервера клиенту сообщение приходит, а от клиента серверу не приходит

Пишу клиент-серверное приложение, от сервера клиенту сообщение приходит, а от клиента серверу не приходит

Пишу клиент-серверное приложение, от сервера клиенту сообщение приходит, а от клиента серверу не приходитПричём не выводится никакой ошибки,...

97