【问题标题】:trying to get an integer variable out from an array list试图从数组列表中取出一个整数变量
【发布时间】:2014-01-05 17:11:06
【问题描述】:

我有一个名为 caseArrayList 的字符串数组列表。我在数组列表中有一些单词和一些数字......我试图从数组列表中取出数字并制作整数,以便我可以用这些数字进行一些计算。这是我的代码不起作用:

我的数组列表如下所示:打开打开打开打开打开打开打开打开我的案例 300000 100 25000 0 500 400000 100000 75000 1 5 500000 75 25 750000 1000 10 200000 400 750 22 如果我使用@ 在 for 循环中。

    for (int j = 0; j < casesArrayList.size(); j++)
       {
        if (!casesArrayList.get(j).equals("My Case") &&  !casesArrayList.get(j).equals("Opened")) {
          System.out.print(casesArrayList.get(j) + " ");
       }

//此时输出为:300000 100 25000 0 500 400000 100000 75000 1 5 500000 75 25 750000 1000 10 200000 400 750

// 错误在下一行:

       int c = (int) casesArrayList.get(j);
       System.out.print(c + " ");
    }

如何从数组列表中取出数字并生成变量,因为 parseInt、valueOf 或 (int) 不起作用。

我编辑了代码:

for ( int j = 0; j < casesArrayList.size(); j++) {
        if (!casesArrayList.get(j).equals("My Case") &&  !casesArrayList.get(j).equals("Opened")) {
          System.out.print(casesArrayList.get(j) + " ");
       }

        try {
            int c = Integer.parseInt(casesArrayList.get(j));
            System.out.print(casesArrayList.get(j) + " ");
        } catch (Exception e) {
            System.out.println(e);
       }
          System.out.print(c + " ");
    }

错误消息仍然: 没有找到适合 parseInt(java.lang.Object) 的方法

方法 java.lang.Integer.parseInt(java.lang.String) 不适用;

http://i.stack.imgur.com/fxl0o.png

非常感谢你们,我不是 Java 专家,我犯了一些非常明显的错误,但我终于成功了……@Suresh 是对的,完美运行的代码是:

 for (int j = 0; j < casesArrayList.size(); j++) {

         if (!casesArrayList.get(j).equals("My Case") &&  !casesArrayList.get(j).equals("Opened")) {
             total = total + (Integer.parseInt((String)casesArrayList.get(j)));
             n = n + 1;
         }
         average = total / n;
    }
    System.out.println();
    System.out.println("The total is "+ total);
    System.out.println("The average is "+ average);

【问题讨论】:

  • 所以它不是一个 ArrayList,而是一个原始的 ArrayList。不要使用原始类型。您的变量类型应该是 ArrayList。否则,您将无法了解列表中对象的类型,需要先转换它们:String s = (String) casesArrayList.get(j)。你是在哪里学习 Java 的?看起来您的老师、教程或书籍仍然像多年前一样教授 Java。
  • @JB 我刚看到你的评论,你是对的......我将编辑我的代码,现在是原始类型/......我认为是字符串数组列表,因为这个:for(int i = 0; i

标签: java arraylist integer


【解决方案1】:

由于casesArrayList 是一个字符串ArrayList,它的每个值都是一个String,因此您需要解析该字符串。不是直接演员

try {
     System.out.println(Integer.parseInt(casesArrayList.get(j)));
} catch(NumberFormatException ex){
   // do something here if it is not a number     
}

Integer.parseInt()

正如我看到你提到的屏幕截图,它不是一个字符串数组列表,你得到的类型是对象(不确定)。尝试将其转换为 String,然后尝试。

  System.out.println(Integer.parseInt((String)casesArrayList.get(j)));

【讨论】:

  • 不要忘记在 try/catch 块中解析字符串!您需要捕获 NumberFormatExceptions 并处理列表中实际上不是数值的项目。
  • @MichaelHillman 如果列表应该包含表示整数的值,最好让异常冒泡而不是捕获它。
  • 真是个好主意,但它给了我错误消息:没有找到适合 parseInt(java.lang.Object) 的方法 ...方法 java.lang.parseInt(java.lang.String) 是不适用;
  • @JBNizet OP 声明该列表有意包含单词和数字:)
  • @MichaelHillman:但他还在解析之前检查该值是否不是任何预期的单词。而处理异常最有效的方法就是抛出另一个异常,那么为什么要先捕获异常呢?
【解决方案2】:

尝试遍历您的列表并执行此操作。

boolean isNum = false;
try {
   Integer.parseInt(str);
   isNum = true;
}catch(Exception ex){
   isNum = false;     
}

这将告诉您哪些元素是整数,哪些不是。
然后只取那些整数并根据需要处理它们。

【讨论】:

    【解决方案3】:

    让我们将casesArrayList 定义为:

    List<String> casesArrayList = new ArrayList<String>();
    casesArrayList.add("Opened");
    casesArrayList.add("Opened");
    casesArrayList.add("My Case");
    casesArrayList.add("200s0");
    casesArrayList.add("1000");
    

    您的代码应如下所示:

    for (int j = 0; j < casesArrayList.size(); j++) {
        if (!casesArrayList.get(j).equals("My Case") && !casesArrayList.get(j).equals("Opened")) {
            try {
                int c = Integer.parseInt(casesArrayList.get(j));
                System.out.print(casesArrayList.get(j) + " ");
            } catch (Exception e) {
                System.out.println(e);
            }
    
        }
    }
    

    【讨论】:

      【解决方案4】:

      将 String 解析为 Integer 不是很优雅,而且可能会引发异常。

      您可以改用正则表达式匹配:

      List<String> list = Arrays.asList("Word", "12321");
      List<String> strings = new ArrayList<String>();
      for (String e : list) {
          if (!e.matches("\\s*-?\\d+\\s*")) {
              strings.add(e);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-08
        • 1970-01-01
        • 1970-01-01
        • 2017-01-18
        • 2013-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多