Использование логических значений с методами set и get - PullRequest
0 голосов
/ 28 мая 2019

Подводя итог, я делаю программу для билетной системы метро.и я использую методы set и get для него, когда дело доходит до логических значений (так как мне нужно проверить, что человек вводит достаточно денег для билета), как я должен положить в основной класс (это определено в мозге)используя метод set и оператор if. Вот небольшая часть всего кода, а остальное на github (https://github.com/alexxei4/subwayticket).. Основной класс - это класс, который будет использоваться для взаимодействия с пользователем, а мозг - этогде многие действия определены. Все помощь приветствуется, пожалуйста, и спасибо.

 if (Choice1a == 10){
            if(subway1.ticketcounter1(true);){
                System.out.println("PRINT SUCCESSFUL, COLLECT YOUR TICKET!");
            }
            if(subway1.ticketcounter1(false);){
                System.out.println("INSEFFICIENT FUNDS, PLEASE ADD MORE");
            }

Ответы [ 2 ]

1 голос
/ 28 мая 2019

Это не то, как вы оцениваете логические значения, вы просто помещаете значение в оператор if, и оно будет выполняться, если true, и отказывается, если false, также нет необходимости дублировать оператор, когда вы можете просто поместите блок else для обработки ситуаций, которые не true:

    if(subway1.ticketcounter1) {
        System.out.println("PRINT SUCCESSFUL, COLLECT YOUR TICKET!");
    }
    else {
        System.out.println("INSEFFICIENT FUNDS, PLEASE ADD MORE");
    }

Также не включайте точки с запятой в операторах if, это неверный синтаксис. Узнайте больше о том, как использовать логические значения здесь: https://codingbat.com/doc/java-if-boolean-logic.html

EDIT:

После прочтения вашего кода на Github я вижу, что ticketcounter1 действительно является методом, но он пытается изменить значение ticketcounter1, как будто это ссылочный объект, но boolean являются примитивными типами данных и могут на него нельзя ссылаться, и даже если бы они могли, это все равно не работало бы, потому что Java - это язык передачи по значению . Прочитайте здесь для получения дополнительной информации об этом.

public void ticketcounter1(boolean ticketcounter1){
    if (credit1 > total1){
        ticketcounter1 = true;
    }
    else {
        ticketcounter1 = false;
    }
}
public void ticketcounter2(boolean ticketcounter2){
    if (credit2 > total2){
        ticketcounter2 = true;
    }
    else {
        ticketcounter2= false;
    }

Как и в другом ответе, вы должны возвращать значение как boolean вместо того, чтобы пытаться изменить его:

public boolean ticketcounter1(){
    if (credit1 > total1){
        return true;
    }
    else {
        return false;
    }
}
public boolean ticketcounter2(){
    if (credit2 > total2){
       return true;
    }
    else {
        return false;
    }
}

Но в целом ваш код продемонстрировал фундаментальные недостатки в понимании того, как работает язык, я бы посоветовал подобрать хорошую Java для начинающих книгу или сделать некоторые вводные онлайн-уроки. Вот хорошее место для начала учебы: https://docs.oracle.com/javase/tutorial/java/index.html

0 голосов
/ 28 мая 2019

Ваш код такой

 public void ticketcounter1(boolean ticketcounter1){
    if (credit1 > total1){
        ticketcounter1 = true;
    }
    else {
        ticketcounter1 = false;
    }
}
public void ticketcounter2(boolean ticketcounter2) {
    if (credit2 > total2){
        ticketcounter2 = true;
    }
    else {
        ticketcounter2= false;
    }
}

Так и должно быть. Вместо использования переменной и передачи ее через параметр. Используйте геттер. Кроме того, ваш код не будет работать, поскольку subway1.ticketcounter1(true) ничего не дает. Это только изменение переменных, хранящихся в Brain.java. Информация не отправляется на главную.

 public boolean ticketcounter1(){
    if (credit1 > total1){
        return true;
    }
    else {
        return false;
    }
}
public boolean ticketcounter2(){
    if (credit2 > total2){
       return true;
    }
    else {
        return false;
    }
}

Вы можете создавать функции без параметров. Я не знаю, что ты пытался сделать?

if (Choice1a == 10){
   if(subway1.ticketcounter1()){
       System.out.println("PRINT SUCCESSFUL, COLLECT YOUR TICKET!");
   }
   if(subway1.ticketcounter1()){
       System.out.println("INSEFFICIENT FUNDS, PLEASE ADD MORE");
   }
}

subway1.ticketcounter1() даст либо истину, либо ложь. Не используйте ; в условии if. ; заканчивает утверждение. Проверьте это руководство , чтобы узнать об использовании точки с запятой. Если вы хотите использовать ; Код должен выглядеть следующим образом

if (Choice1a == 10){
   boolean ticketCounter1 = subway1.ticketcounter1();
   if(ticketCounter1){
      System.out.println("PRINT SUCCESSFUL, COLLECT YOUR TICKET!");
   } else {
      System.out.println("INSEFFICIENT FUNDS, PLEASE ADD MORE");
   }
 }

P.S Вам не нужно два if, если-бы лучше в этом случае

if(condition) {
// Conditions is true
} else {
// Condition is false
}
...