【问题标题】:What is the preferred way to complete this while loop for desired output?完成此 while 循环以获得所需输出的首选方法是什么?
【发布时间】:2017-04-14 14:30:33
【问题描述】:

我编写了一个小程序,它通过查看电子邮件地址并将字母返回到@ 字符来简单地获取电子邮件发件人的姓名。

我以两种方式编写了 while 循环,一种方式启动循环,第二种方式使用嵌套的 if 语句。两者都一样好,还是其中一种方法优于另一种方法?

启动while循环:

public void FindUserName() {

    Scanner keyboard = new Scanner(System.in);
    char symbol = ' ';
    System.out.println("Please enter email!");
    symbol = keyboard.findWithinHorizon(".", 0).charAt(0);

    while (symbol != '@') {
        System.out.print(symbol);
        symbol = keyboard.findWithinHorizon(".", 0).charAt(0);
    }
    System.out.println();
}

使用嵌套 if 语句来中断 if symbol == '@'

public void FindUserName() {

    Scanner keyboard = new Scanner(System.in);
    char symbol = ' ';
    System.out.println("Please enter email!");

    while (symbol != '@') {
        symbol = keyboard.findWithinHorizon(".", 0).charAt(0);
        if (symbol == '@') {
            break;
        }
        System.out.print(symbol);
    }
    System.out.println();
}

【问题讨论】:

    标签: java while-loop nested-if


    【解决方案1】:

    你不需要做一个循环,你可以很容易地使用:

    String email = "email@abd.com";
    String str = email.substring(0, email.indexOf("@"));
    

    这会给你的email

    【讨论】:

    • 还在学习中。在你使用它之后,直到现在还没有遇到过 .substring 。谢谢,因为这似乎更简单,但从未如此简单,我正在学习 while 循环,并且仍然想知道使用 while 循环时的首选方式。
    • @James 在你的情况下你不需要使用 break,你可以使用它来避免你的 if 之后的动作,在这种情况下 break 有意义,但在你的情况下你已经在您的循环中进行了检查,因此无需使用 break
    • 我现在明白了,我实际上是在重复自己使用 If 语句,因为我已经在 while 循环中检查过它。这些信息对我来说非常有价值。谢谢。
    【解决方案2】:

    第二个循环中的if语句没有意义,因为while的条件已经检查过了。

    尝试使用正则表达式。选项 1

    String[] splitted = email.split("@");
    String name = splitted[0];
    

    【讨论】:

    • 感谢您的回复。你说,while 条件已经检查过了,但即便如此,System.out.print(symbol);将被初始化并在循环结束之前打印@。
    • 是的。这是因为您在循环的开头有一个空符号。你应该先初始化它。因为您应该避免在一个循环中对一个变量进行双重检查。这是一种不好的做法,您违反了不要重复自己的规则。
    • 啊哈。现在我明白了。我没有收到初始化错误,所以我没有。现在这很有意义。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 2022-01-12
    • 2014-09-16
    • 1970-01-01
    • 2022-09-23
    • 2021-08-20
    • 1970-01-01
    相关资源
    最近更新 更多