【问题标题】:How to Check the Value Associated to String Object in ArrayList?如何检查与 ArrayList 中的字符串对象关联的值?
【发布时间】:2016-05-13 07:19:28
【问题描述】:

我有一个包含多个不同类型对象的 ArrayList。 在一个索引处,我有一个带有 String 值的元素。我知道索引位置,并且我知道字符串与整数或双精度值相关联。

如何检查对象关联的值是双精度还是整数?

编辑:我不是在尝试将 5.5 与 5 进行比较,当我尝试检查任一 object 的数据类型时,我得到一个编译器错误说明我无法解析对象。

我的数组列表由两个字符串对象组成。我正在做的是解析 String 对象,而不是与该对象关联的String 值

EDIT2:更正!!!这些对象实际上是NOT String 对象。相反,它们只是没有与它们关联的特定类的对象。无需在数组列表中声明对象类型,数组列表将自动将每个元素分配给一个对象值(而不是一个对象是 String,一个对象是 double,一个对象是 int,等等)

~~~

我的代码示例:

import java.util.ArrayList;
public class idk {

  public static void main(String[] args) {
    ArrayList myList1 = new ArrayList();
    ArrayList myList2 = new ArrayList();

    myList1.add("5.5");
    myList2.add("5");

    //How does one check if the value associated to the String object 
    //in the arrayList (like myList.get(1)) is a double or an integer?
  }
}

我只尝试过实现 isDouble 方法,但它会检查对象是否为 double 而不是字符串对象的值。

import java.util.ArrayList;

public class idk {

    //I've attempted to try using this method to check the value but I get
    //a compiler error saying I can't use the isDouble method which checks
    //for a String value, not the value of the actual String object in the arraylist
    boolean isDouble(String str) {
      try {
        Double.parseDouble(str);
          return true;
      }
      catch (NumberFormatException e) {
        return false;
      }
    }


    public static void main(String[] args) {
      ArrayList myList1 = new ArrayList();
      ArrayList myList2 = new ArrayList();

      myList1.add("5.5");
      myList2.add("5");

      if (isDouble(myList1.get(0))==true) {
        System.out.println("The object in pos 0 is a double");
      }else {
        System.out.println("The object in pos 0 is not a double");
      }

      if (isDouble(myList1.get(0))==true) {
        System.out.println("The object in pos 0 is a double");
      }else {
        System.out.println("The object in pos 0 is not a double");
      }

    }

【问题讨论】:

  • 您已经实现了 isDouble 似乎工作正常。你还需要补充什么?

标签: java string object arraylist


【解决方案1】:

我会尝试将字符串解析为 Integer 和 Double,然后检查结果值是否相等。

"5" 作为双精度数只是 5.0,作为整数是 5。它们是相等的,所以你的字符串是一个整数。

"5.2" 作为双精度数是 5.2,而作为整数是 5。它们不相等,因此您的字符串不是整数 - 根据您的问题的构造,因此必须是双精度数。

编辑:我刚刚试了一下,如果你将“5.2”传递给Integer.parseInt(),它会抛出异常NumberFormatException。因此,如果您的字符串抛出异常,它有一个小数点并代表一个双精度。否则它是一个整数。

【讨论】:

  • 或转换为双精度并使用数学舍入函数
  • @RaduIonescu - 也可以这样做!
【解决方案2】:

一定要考虑整数和双精度之间的区别。所有双精度数都可以是整数还是所有整数都可以是双精度数? (一个是正确的)

如果你能回答这个问题,那么你就会知道你的 isDouble 方法应该先测试,然后再测试。

而是先测试它是否为整数,因为并非所有双精度数都是整数。

boolean isInteger(String str) { try{ Integer.valueOf(str); //You should be able to use parseInteger also return true; } catch (NumberFormatException e){ return false; } }

那么你仍然需要确保字符串是双精度的,而不是其他的。你的方法在这里就足够了。

【讨论】:

    【解决方案3】:

    我尝试使用此方法检查值,但我得到了
    编译器错误说我不能使用检查的 isDouble 方法
    对于 String 值,而不是 arraylist 中实际 String 对象的值

    只需将从myList1.get(0)返回的对象转换为字符串,然后调用isDouble方法,

    if (isDouble(myList1.get(0).toString()) == true) {
    

    或将您的 isDouble 方法参数从 String 更改为 Object ,这样就可以了

    boolean isDouble(Object obj) {
       try {
           Double.parseDouble(obj); 
           /* 
             obj must be converted to string first and then you can call 
             parseDouble method on it , so you will get an error like this
             error: incompatible types: Object cannot be converted to String
           */
           return true;
       } catch (NumberFormatException e) {
           return false;
       }
    }
    

    然后尝试其中一种方法来修复我所说的错误。

    • 1.使用 Casting 的好处,调用 parseDouble 如下代码

      Double.parseDouble((String) obj );
      
    • 2.使用obj.toString()

      Double.parseDouble(obj.toString());
      

    注意: 对于 doublesintegers
    ,此方法始终返回 true 因为每个整数都是双精度数,所以这个方法没用
    改用isInteger 方法,如sbgreene1307 answered

    所有你需要改变的是:

    • 将名称从 isDouble 更改为 isInteger
    • Double.parseDouble(str); 更改为Integer.parseInt(str);

    【讨论】:

      猜你喜欢
      • 2018-06-13
      • 1970-01-01
      • 1970-01-01
      • 2021-08-03
      • 1970-01-01
      • 1970-01-01
      • 2016-07-14
      • 1970-01-01
      • 2019-03-03
      相关资源
      最近更新 更多