【问题标题】:How to check the object of type int[] of an arraylist?如何检查arraylist的int []类型的对象?
【发布时间】:2015-05-25 13:11:26
【问题描述】:

我正在尝试找出我的ArrayList (arrayOne) 中的特定元素。每个元素都应该是一个int[]。我试过System.out.println(arrayOne),它编译但给出一个不规则和奇怪的数字“[[I@370968]”。

我也试过System.out.println(arrayOne[0]),但它不会编译并发出错误

需要数组,但找到了 java.util.ArrayList。

给出以下代码,将 {1,12,3,13,123,2} 传递给eg

import java.util.ArrayList;

public class arrayTest {
    private ArrayList<int[]> arrayOne; 

    public arrayTest(int[] eg) {
        int[] xy = new int[2];
        arrayOne = new ArrayList<int[]>(eg.length);
        for (int i = 0; i < eg.length; i++) {
            int sv = String.valueOf(eg[i]).length();
            if (sv == 1) {
                xy[0] = 0;
                xy[1] = eg[i];
                arrayOne.add(xy);
            }
            else if (sv == 2) {
                System.out.println("two digits");
                // TODO add code to make xy[0] = the first
                // digit of eg and xy[1] = the second digit
            }
            else {
                System.out.println("too many digits");
                // and throw error accordingly
            }
            System.out.println(arrayOne);
        }
    }
}
  1. 如何确定并打印出arrayOne[0]处的int数组
  2. 鉴于上面的代码 if (sv == 2) 并且我想将每个单独的数字拆分为一个 int[],其中 [0] 是第一个数字,[1] 是第二个数字,我将如何获得 int 值每个数字。

【问题讨论】:

  • 更改您问题的标题。这是(某种)误导:)
  • System.out.println(Arrays.toString(arrayOne));这将正确显示数组元素。
  • @Arin:不,由于Arrays.toString() 的所有重载形式,它会给出编译时错误,没有一个会以ArrayList 作为参数。
  • yup @ares...只是忽略了它。我只想说 Kayaman 所说的话。+1 指出它。

标签: java arrays arraylist int


【解决方案1】:

使用Arrays.toString(yourArray); 以人类可读的形式打印出数组。

【讨论】:

    【解决方案2】:

    首先,显示字符串[I@370968,因为您试图打印一个int[],它实际上是一个对象。因为该对象没有覆盖对象的toString() 方法,所以该方法派生自Object 类。 Object.toString() 实现,它打印类名(在本例中为 [I,因为它是一个 int 数组),然后是 @ 符号,然后是对象的哈希码。

    您的ArrayList 包含多个int[]s。因为ArrayList 不是数组(带方括号的数组,如int[]),所以不能像调用数组一样调用其上的元素。总之,你不能打电话给arrayOne[someDesiredIndex]

    为了从ArrayList中获取一个元素,调用get(int index)就可以了;它返回所需的int[]。正如另一个答案已经指出的那样,您可以使用Arrays.toString(int[]) 以人类可读的形式打印它。

    回答您的问题:

    1. 您可以使用以下代码检索arrayOne 内第一个数组的第一个索引(0):arrayOne.get(0)[0]
    2. 以下代码应该可以工作:

      private static int[] intToArray(int n) {
          String str = String.valueOf(n);
          int length = str.length();
          int[] ints = new int[length];
          for (int i = 0; i < length; i++) {
              ints[i] = Integer.parseInt(str.substring(i, i + 1));
          }
          return ints;
      }
      

      上述方法将每个数字放入下一个数组位置(它也适用于大于 99 的数字)。使用这种方法,您可以轻松获取每个单独的数字:

      int[] digits = intToArray(47);
      int a = digits[0]; // Will be 4
      int b = digits[1]; // Will be 7
      

    所以这是重写的类:

    public class Rewrite {
    
        private ArrayList<int[]> arrayOne = new ArrayList<int[]>();
    
        public Rewrite(int[] eg) {
            for (int i = 0; i < eg.length; i++) {
                int length = String.valueOf(eg[i]).length();
                switch (length) {
                    case 1:
                        this.arrayOne.add(new int[] { 0, eg[i] });
                        break;
                    case 2:
                        this.arrayOne.add(intToArray(eg[i]));
                        break;
                    default:
                        throw new IllegalArgumentException("Number " + eg[i] + " has too many digits");
                        // Or display the error or something.
                }
                System.out.println(Arrays.toString(this.arrayOne.get(i)));
            }
        }
    
        private static int[] intToArray(int n) {
            String str = String.valueOf(n);
            int length = str.length();
            int[] ints = new int[length];
            for (int i = 0; i < length; i++) {
                ints[i] = Integer.parseInt(str.substring(i, i + 1));
            }
            return ints;
        }
    
        public static void main(String[] args) {
            Rewrite r = new Rewrite(new int[] { 47, 53, 91, 8 });
        }
    

    【讨论】:

      猜你喜欢
      • 2011-01-27
      • 1970-01-01
      • 2010-11-24
      • 1970-01-01
      • 1970-01-01
      • 2011-02-14
      • 2012-12-04
      • 2012-01-12
      • 1970-01-01
      相关资源
      最近更新 更多