【问题标题】:simple conditional in java (unexpected issue)java中的简单条件(意外问题)
【发布时间】:2014-07-04 20:01:23
【问题描述】:

在 java 中使用条件运算符时遇到了一个意外问题。 该代码应该检查ArrayList 是否包含特定字符串,然后返回true 或false。这不是我第一次这样做,但由于某种原因出现了问题。

这是我目前的代码:

 public boolean isDone() {
   ArrayList<String> al = new ArrayList<String>(); //Defining ArrayList
   al.add(d1.getText());    // Adding the text from JLabels.
   al.add(d2.getText());   
   al.add(d3.getText());    
   al.add(d4.getText());   
   al.add(d5.getText());    

   if(al.contains(".")) {   
       return false;
   } else {
       return true;
   }

问题是在运行调试器时,它应该返回false,而不是返回true。由于某种原因,条件不是“读取” ArrayList 的内容或类似的东西。

如您所见,ArrayList 包含需要条件返回 false 的 .,但不是那样,而是返回 true。我的代码有什么问题?

【问题讨论】:

  • 我在ArrayList 中看不到任何"."
  • 您可能想检查ArrayList 的每个元素是否包含"."

标签: java arraylist conditional-operator


【解决方案1】:

试试这个:

public boolean isDone() {

    ArrayList<String> al = new ArrayList<String>();

    al.add(d1.getText());
    al.add(d2.getText());   
    al.add(d3.getText());    
    al.add(d4.getText());   
    al.add(d5.getText()); 

    for (String str : al)
        if (str != null && str.contains("."))
            return false;

    return true;

}

您必须单独检查 每个字符串ArrayList 中的 contains() 方法将仅在确切的字符串 "." 存在于列表中时返回 true,而不是如果其中之一列表中的字符串包含一个点。

【讨论】:

    【解决方案2】:

    当您使用 a1.contains(...) 时,您正在检查数组中的任何字符串是否为“.”。这与您检查数组“a1”中的任何字符串是否包含“。”的意图不同。我理解的字符。

    如果您需要检查数组中是否有任何字符串包含“。”文本可以是这样的:

    for(String text : a1) {
      if(text != null && text.indexOf(".") >= 0) {
        return false;
      }
    }
    return true;
    

    【讨论】:

      【解决方案3】:

      您的List&lt;String&gt; 不包含等于"."String。您有一个包含 . 的字符串,但这不是一回事。你可以通过String.contains(CharSequence) 做到这一点,

      public boolean isDone() {
        List<String> al = new ArrayList<String>(); // <-- I would use the Interface type
        al.add(d1.getText());
        al.add(d2.getText());   
        al.add(d3.getText());    
        al.add(d4.getText());   
        al.add(d5.getText());
      
        // If any String in al contains a '.' return false, else true.
        for (String str : al) {
          if (str.contains(".")) {
            return false;
          }
        }
        return true;
      }    
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-24
        • 2017-07-17
        • 2016-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多