【问题标题】:Using booleans with set and get methods使用带有 set 和 get 方法的布尔值
【发布时间】:2019-05-28 17:32:52
【问题描述】:

总而言之,我正在为地铁票系统制作程序。我正在使用 set 和 get 方法,当涉及到布尔值时(因为我需要验证该人是否为票输入了足够的钱)我应该如何放入主类(它在大脑中定义)使用 set 方法和 if 语句。这里是整个代码的一小部分,其余的在 github(https://github.com/alexxei4/subwayticket) 上。 main 基本上是用于与用户交互的类,而大脑是定义很多动作的地方。感谢所有帮助,谢谢。

 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");
            }

【问题讨论】:

    标签: java oop object get set


    【解决方案1】:

    这不是您评估布尔值的方式,您只需将值放在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

    编辑:

    阅读您的 Github 代码后,我发现 ticketcounter1 确实是一种方法,但它正在尝试更改 ticketcounter1 的值,就像它是一个引用对象一样,但 boolean 是原始数据类型,可以' 不会被引用,即使他们可以,它仍然无法工作,因为 Java 是一种 pass-by-value 语言。阅读here了解更多信息。

    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

    【讨论】:

    • 我试过了,但即使信用额高于门票金额或总金额,它也只会说明资金不足
    • 虽然开玩笑,但你的解释确实有帮助,我不再使用布尔值并使用了不同的方法,是的,我知道我的 java 现在很糟糕,但我仍在学习谢谢跨度>
    【解决方案2】:

    你的代码是这样的

     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 中的变量。没有信息被发送到 main。

     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 语句条件中使用;; 结束声明。检查此guide 以了解分号的使用如果您确实想使用; 代码应如下所示

    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-else 会更好

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

    【讨论】:

    • 当我尝试使用你的推荐时(第一段代码是你说它应该是什么样子的)。我收到一个错误,它说“无法从具有 void 结果类型的方法返回值”
    • 您的返回类型很可能是无效的。将其更改为布尔值并查看代码是否有效。顺便说一句,第一段代码不是我的。我只是在 github 上引用你的话。
    猜你喜欢
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多