【问题标题】:How to compare an element from ArrayList with a specific String?如何将 ArrayList 中的元素与特定字符串进行比较?
【发布时间】:2017-04-07 19:54:03
【问题描述】:

我目前正在开发一个问答游戏。在下面的public void Run() 中,我想用正确的答案验证用户输入String answeranswersList.forEach(new String.

我正在尝试使用boolean 来执行此操作。但我收到此错误消息:“无法解析构造函数'String(boolean)'。我该如何解决这个问题?

私有 volatile 布尔值的初始化:

class Broadcaster extends Thread {
private volatile boolean check_point = true;

public boolean getFlag() {
    System.out.println("getFlag is running");
    return this.check_point;

}

在 BufferedReader、PrintStrem 等之后...

  public void run() {
    while (true) {
        try {
            List<String> answersList = new ArrayList<>();
            try (Stream<String> answersStream = Files.lines(Paths.get(answersFile))) {
                answersList = answersStream
                        .map(String::toLowerCase)
                        .collect(Collectors.toList());
            } catch (IOException a) {
                a.printStackTrace();
                System.out.println("The timer isn't working correctly");
            }
            if (answersList.forEach(new String(equals(answer)))) { //ERROR MESSAGE
                write.println("Right Answer");
                points++;
                check_point = true;

            } else {
                write.println("Wrong Answer");
                check_point = false;
            }
        } catch (Exception e) {
            System.out.println("Some problem with the validation");
         }
     }
   }
}

【问题讨论】:

  • 您要比较哪些字符串?
  • 问题是您将“equals(answer)”的结果传递给 String 的构造函数,它是一个布尔值,因此没有采用布尔值的 String 构造函数,即使你要删除“equals()”你仍然会得到一个错误,因为 forEach 方法接受一个消费者。请指定所需的所有代码以及您想要的最终结果。
  • 只使用 List.contains(answer)。
  • @JosefLundström 看到我的答案。

标签: java arraylist string-comparison


【解决方案1】:

但我收到此错误消息:“无法解析构造函数 '字符串(布尔值)'。我该如何解决这个问题?

问题是你将"equals(answer)" 的结果传递给String 的构造函数,因此没有String 构造函数接受boolean 值。


现在要解决这个问题,您可以像这样使用 lambda 表达式:

if(answersList.stream().anyMatch(str -> str.equals(answer))){
    write.println("Right Answer");
    points++;
    check_point = true;
}else{
    write.println("Wrong Answer");
    check_point = false;    
}

或者简单地说:

if(answersList.contains(answer)){
    write.println("Right Answer");
    points++;
    check_point = true;
}else{
   write.println("Wrong Answer");
   check_point = false;
}

【讨论】:

  • 感谢 Ousmane 的回答。我确实接受了这个答案,因为它是根据我最初试图实现的目标。谢谢所有愿意帮助我的人...
  • @JosefLundström 很高兴知道它有帮助! :)。
【解决方案2】:

出于同样的原因 String s = new String(false);导致错误,您不能从布尔值创建字符串对象。

试试这个...

if (answersList.forEach(new String(Boolean.toString(equals(answer)))))

我觉得你正在让你想做的事情变得比它必须做的更复杂......

【讨论】:

  • 这不会编译,因为 forEach 将消费者作为参数。
  • 那你为什么要给它提供一个字符串呢?
  • .anyMatch() 返回一个布尔值。至于消费者接受参数但不返回任何内容的“forEach”,这基本上就是我要了解的内容。
【解决方案3】:

我认为最简单的方法是使用

answersList.contains(answer) 

而不是

answersList.forEach(new String(equals(answer)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    • 2020-05-29
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多