【问题标题】:Check first element on a 2D array in JAVA检查JAVA中二维数组的第一个元素
【发布时间】:2021-05-05 21:00:23
【问题描述】:

假设我们有一个如下的二维数组,

[[name1, g, t, w, q, p], [name2, b, g, f, y, o]]

我正在创建一个地址簿,它采用这个二维数组并根据 name1、name2 等搜索内部数组。为此,我创建了以下代码,

if (catalog.isEmpty()){
       System.out.println("Address book is empty!!!\n");
       continue;
}
System.out.println("Choose the contact name for search");
Scanner retrieve_input = new Scanner(System.in);
String retrieve = retrieve_input.nextLine();
for (ArrayList<String> list : catalog) {
    if (list.get(0).contains(retrieve)) {
       list.indexOf(retrieve);
       System.out.println(catalog);
    } else {
       System.out.println("There's no such name in the book\n");
    }
 }

问题是当我在终端上输入 name1 或 2 时,我收到了 else 语句。我做错了什么?

【问题讨论】:

    标签: java arrays arraylist


    【解决方案1】:

    您收到 else 是因为一旦您发现 retrieve 的出现,您就不会停下来继续寻找另一个列表。

    for (ArrayList<String> list : catalog) {
        if (list.get(0).contains(retrieve)) {
           list.indexOf(retrieve);
           System.out.println("FOUND");
           break; // <-------- break if found
        } else {
           System.out.println("There's no such name in the book\n");
        }
    }
    

    【讨论】:

    • 不幸的是 else 语句不断出现!
    • 尝试了带标签的循环,但仍然不起作用!
    【解决方案2】:

    lambda 似乎也是可读的,

    catalog.stream().filter(l -> l.get(0).contains(retrieve)).findFirst().ifPresentOrElse(l -> {
          l.indexOf(retrieve);
          System.out.println("FOUND");
        }, () -> System.out.println("Not found"));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-14
      • 1970-01-01
      • 2013-03-03
      • 1970-01-01
      • 2019-08-28
      • 1970-01-01
      相关资源
      最近更新 更多