我正在尝试找出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);
}
}
}
答案 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[])
以人类可读的形式打印它。
回答你的问题:
0
内第一个数组的第一个索引(arrayOne
):arrayOne.get(0)[0]
。以下代码应该有效:
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 });
}