【问题标题】:How to not repeat an else statement如何不重复 else 语句
【发布时间】:2023-04-07 22:41:01
【问题描述】:
public class array {
    public static void main(String[] args) {
        String names[] = {"John", "Mary", "Peter"};

        Scanner myScanner = new Scanner(System.in);
        System.out.print("Enter name: ");
        String nameEntered = myScanner.nextLine();


        for (int i = 0; i <= names.length; i++) {
            if (nameEntered.equals(names[i])) {
                System.out.println(names[i] + " is a common name.");
            } else {
                System.out.println(nameEntered + " is not a common name.");
            }
        }
    }
}

如何让 else 语句只打印一次?如果我这样做,它的输出是 nameEntered +“它不是一个通用名称。”三次。不能断;对,因为当满足 if 语句时它会打印一些奇怪的东西。如果我使用 continue ,它将检查所有三个,如果我输入 Mary ,输出将类似于“Mary is not a common name” “Mary is a common name” “Mary is not a common name”

【问题讨论】:

  • 使用名为found的逻辑(布尔)变量,将其初始化为false。在循环中不打印任何内容,仅在名称匹配时设置found(之后您可以break)。根据found,在循环之后执行每次打印
  • 但是如何打印出与我输入的字符串匹配的 found = true 语句?
  • 找到匹配项时只需 break

标签: java arrays for-loop if-statement


【解决方案1】:

根据您的评论,我已经编辑了答案。您必须使用 cmets 中建议的标志。见下文-

import java.util.*;

public class HelloWorld{
    public static void main(String[] args) {
        String names[] = {"John", "Mary", "Peter"};

        Scanner myScanner = new Scanner(System.in);
        System.out.print("Enter name: ");
        String nameEntered = myScanner.nextLine();

        boolean nameFound = false;
        for (String name : names){
            if (nameEntered.equals(name)) 
                nameFound = true;            
        } 
        if(nameFound)
            System.out.println(nameEntered + " is a common name.");
        else
            System.out.println(nameEntered + " is not a common name.");
    }
}

请看下面输出的截图-

可以通过关注this link访问代码。

【讨论】:

  • 这会迫使您不断输入新名称,对吗?我只想输入一次名称并检查数组。
  • 简单多了!
  • 我试过这段代码,但如果我输入一个不常见的名字,它不会显示任何输出
  • 对不起,您能解释一下 (String name : names) 的原因和作用吗?以及为什么不能使用典型的 for 循环。虽然谢谢,但此代码有效。
  • for (String name : names) 是一种简洁/增强的 Java 迭代方式。您绝对可以用传统的for 循环替换它,即for (int i = 0; i &lt; names.length; i++)。请注意,您问题中的 for 循环超出了范围。如果您使用增强的方式,那么您无需担心边界。无论如何,正如您所说的代码有效,因此请接受并投票赞成答案。
【解决方案2】:

您可以使用 continue 或 break 语句。

public class array {
    public static void main(String[] args) {
        String names[] = {"John", "Mary", "Peter"};

        Scanner myScanner = new Scanner(System.in);
        System.out.print("Enter name: ");
        String nameEntered = myScanner.nextLine();


        for (int i = 0; i <= names.length; i++) {
            if (nameEntered.equals(names[i])) {
                System.out.println(names[i] + " is a common name.");
            } else {
                System.out.println(nameEntered + " is not a common name.");
                continue;
            }
        }
    }
}

【讨论】:

    【解决方案3】:

    那么,您可以一开始就避免循环吗? (虽然只有 Java 8 及更高版本) 我不知道你在寻找什么,但对我来说感觉很自然。

    import java.util.Arrays;
    import java.util.Scanner;
    
    public class Test {
        public static void main(String[] args) {
            String names[] = {"John", "Mary", "Peter"};
    
            Scanner myScanner = new Scanner(System.in);
            System.out.print("Enter name: ");
            String nameEntered = myScanner.nextLine();
    
    
            String result = Arrays.stream(names).
                                    filter(nameEntered::equals).
                                    findAny().
                                    map(name -> name + " is a common name.").
                                    orElseGet(() -> nameEntered + " is not a common name.");
    
            System.out.println(result);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2022-11-15
      • 2020-04-29
      • 2017-10-28
      • 2013-06-11
      • 1970-01-01
      • 2021-03-30
      • 2015-02-03
      • 1970-01-01
      • 2015-09-06
      相关资源
      最近更新 更多