为了账号安全,请及时绑定邮箱和手机立即绑定

如何打破 java 中的“if”语句?

如何打破 java 中的“if”语句?

拉风的咖菲猫 2023-01-05 17:21:06

在下面的代码中。我只想先执行 if 语句。执行时显示输出,有效再试一次。我想要它,只打印“有效”而不显示“再试一次”。在java中怎么做。??我是初学者。


public class Test {

    public void validate(int age) {

        if (age >= 18) {

            System.out.println("Valid.");

        }

        if (age < 18) {

            System.out.println("Not valid.");

        } else {

            System.out.println("try again.");

        }

    }


    public static void main(String[] args) {

        Test t = new Test();

        t.validate(18);

    }

}


查看完整描述

3 回答

?
蛊毒传说

TA贡献1630条经验 获得超3个赞

简而言之:


public void validate(int age) {

    if (age >= 18) {

        System.out.println("Valid.");

    } else {

        System.out.println("Not valid.");

        System.out.println("Try again.");

    }

}

解释:if如果年龄至少为 18 岁,第一个仅打印文本,但这与以下几行无关。那些自行行动并有两种情况:用户未满 18 岁或显示“重试”文本。


你想要做的是检查“年龄是否至少为 18 岁?” (就像你已经做的那样)然后显示“有效”或“无效”。通过将else案例添加到此检查来执行此操作,您就可以了。


编辑:else由于我理解为“我需要显示第二条消息但仅在年龄无效的情况下”的第二条评论,我将第二行附加到案例中。


查看完整回答
反对 回复 2023-01-05
?
青春有我

TA贡献1551条经验 获得超8个赞

首先,让我们整理一些关于整数的事实。

  1. 如果整数 >= 18,则意味着它不 < 18

  2. 如果整数 < 18,则表示它不是 >= 18

  3. 任何数字都是整数,它要么 >= 18 要么 < 18。不能两者都是。两者都不是。

现在到你的代码。我可以这样写你的方法:

public void validate(int age) {

    if (age >= 18) {

        System.out.println("Valid.");

    }

    if (age < 18) {

        System.out.println("Not valid.");

    }

}

或更简单(基于上述事实)


public void validate(int age) {

    if (age >= 18) {

        System.out.println("Valid.");

    } else {

        System.out.println("Not valid.");

    }

}

那将写Validor Not Valid。


我也可以这样写代码:


   public void validate(int age) {

        if (age >= 18) {

            System.out.println("Valid.");

            return;

        }

        if (age < 18) {

            System.out.println("Not valid.");

        } else {

            System.out.println("try again.");

        }

    }

但else由于上述有关数字的事实,该部分是多余的。请注意我是如何使用 areturn来“中断”控制流的。


您不能break在此上下文中使用语句。JLS 14.15中的 Java 语言规范声明


对于未标记的break语句:


“如果直接封闭的方法、构造函数或初始化程序中没有 switch、while、do 或 for 语句包含 break 语句,则会发生编译时错误。”


我们这里没有switch, while,do或for声明。


JLS 说,对于有标签的休息时间。


" break 语句必须引用直接封闭的方法、构造函数、初始化程序或 lambda 主体中的标签。没有非局部跳转。如果在立即封闭的方法、构造函数、初始化程序中没有以标识符作为其标签的标记语句,或 lambda 主体包含 break 语句,发生编译时错误。 ”


...所以我想可以这样写:


   public void validate(int age) {

       label: { 

           if (age >= 18) {

               System.out.println("Valid.");

               break label;

           }

           if (age < 18) {

               System.out.println("Not valid.");

           } else {

               System.out.println("try again.");

           }

       }

   }

但坦率地说,这太可怕了。


查看完整回答
反对 回复 2023-01-05
?
犯罪嫌疑人X

TA贡献1813条经验 获得超4个赞

   public void validate(int age) {

        if (age >= 18) {

            System.out.println("Valid.");

        } else if (age < 18) {

            System.out.println("Not valid.");

        } else {

            System.out.println("try again.");

        }

    }


    public static void main(String[] args) {

        Test t = new Test();

        t.validate(18);

    }

你的代码的问题是即使age>=18它仍然会检查它是否也<18,所以它总是会说什么try again时候age>=18。另外,请检查它永远不会try again用这个更正的代码说的评论,因为在任何情况下都age不会同时 <18 和 >=18


编辑我更喜欢丹尼斯的代码,因为我认为这就是你想要实现的目标。


查看完整回答
反对 回复 2023-01-05

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信