如何检查arraylist的int []类型的对象?

时间:2015-05-25 13:11:26

标签: java arrays arraylist int

我正在尝试找出ArrayList(arrayOne)中的特定元素。每个元素应为int[]。我已经尝试了System.out.println(arrayOne),它编译但是给出了一个不规则且奇怪的数字“[[@ @ 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]
  2. 打印出int数组
  3. 鉴于上面的代码if(sv == 2)并且我想将每个单独的数字拆分成一个int [],其中[0]是第一个数字,[1]是第二个数字,我将如何得到int值每个数字。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

首先,显示字符串[I@370968,因为您正在尝试打印int[],这实际上是一个对象。由于此对象不会覆盖对象的toString()方法,因此该方法派生自Object类。 Object.toString()实现,它打印类名(在本例中为[I,因为它是一个int数组),然后是@符号,然后是对象的哈希码。 / p>

您的ArrayList包含多个int[]个。因为ArrayList不是数组(带方括号的数组,如int[]),所以不能像调用数组那样调用元素。简而言之,您无法拨打arrayOne[someDesiredIndex]

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

回答你的问题:

  1. 您可以使用以下代码检索0内第一个数组的第一个索引(arrayOne):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
    
  3. 所以这是重写的类:

    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 });
        }