ArrayList 不存储值
ArrayList not storing values
我是 ArrayLists 概念的新手。我正在使用它们,因为我想要一个动态数组,它的大小不受限制,可以按顺序保存多少个值。但是我使用的方法没有正确存储值。我只保留一个值为1。我的代码如下:
public void Rand(){
Random rand = new Random();
int Val = rand.nextInt(5);
ArrayList<Integer> ValList = new ArrayList<Integer>();
ValList.add(Val);
Log.d("LOOK", Integer.toString(ValList));
Log.i("VALUE LIST ", ValList.size()+" <<<<LIST HERE"); }
这个过程在 oncreate 中调用,然后循环返回理想情况下,每次 class 运行时,一个新的随机数将按顺序添加到数组中。
这是logcat上的相关信息:
03-05 19:15:15.020: D/LOOK(21325): 3
03-05 19:15:15.020: I/VALUE LIST(20883): 1 <<<<LIST HERE
03-05 19:15:15.040: D/LOOK(21325): 5
03-05 19:15:15.040: I/VALUE LIST(20883): 1 <<<<LIST HERE
如您所见,即使随机值不是 1,它也只存储值 1。我是不是使用了错误的数组类型或实现方式不正确?
我想看到的输出是这样的:
03-05 19:15:15.020: D/LOOK(21325): 3
03-05 19:15:15.020: I/VALUE LIST(20883): 3 <<<<LIST HERE
03-05 19:15:15.040: D/LOOK(21325): 5
03-05 19:15:15.040: I/VALUE LIST(20883): 3, 5 <<<<LIST HERE
因为,您的 ArrayList<Integer> ValList = new ArrayList<Integer>();
仅具有 Rand()
方法的局部作用域,因此每次您调用 Rand()
函数时它都有新的实例。
只需将 ArrayList<Integer> ValList = new ArrayList<Integer>();
声明为 class 级范围。
并使用,
喜欢,
// Class level member declaration
ArrayList<Integer> ValList = new ArrayList<Integer>();
public void Rand(){
Random rand = new Random();
int Val = rand.nextInt(5);
ValList.add(Val);
Log.d("LOOK", ValList.toString());
// Also here you are printing size of Arraylist not a content of arraylest
Log.i("VALUE LIST ", ValList.size()+" <<<<LIST HERE");
}
要打印特定的对象值,您必须使用带有对象位置的 .get()
从 ArrayList 获取对象,或者使用 .toString()
打印所有列表内容
Log.i("VALUE LIST ", ValList.toString()+" <<<<LIST items"); // using .toString() to print all contents of List
更新:
因为我怀疑这一行会抛出异常(但是从你的 logcat 来看它工作正常,因为列表只包含一个项目)
Log.d("LOOK", Integer.toString(ValList));
当您尝试打印列表 valList
的值时,只需使用 .toString()
,例如 ValList.toString()
您正在尝试打印列表的大小。
Log.i("VALUE LIST ", ValList.size()+" <<<<LIST HERE"); }
// 错误(根据问题)
如果您想知道数组包含什么,请尝试打印数组的内容。
我是 ArrayLists 概念的新手。我正在使用它们,因为我想要一个动态数组,它的大小不受限制,可以按顺序保存多少个值。但是我使用的方法没有正确存储值。我只保留一个值为1。我的代码如下:
public void Rand(){
Random rand = new Random();
int Val = rand.nextInt(5);
ArrayList<Integer> ValList = new ArrayList<Integer>();
ValList.add(Val);
Log.d("LOOK", Integer.toString(ValList));
Log.i("VALUE LIST ", ValList.size()+" <<<<LIST HERE"); }
这个过程在 oncreate 中调用,然后循环返回理想情况下,每次 class 运行时,一个新的随机数将按顺序添加到数组中。
这是logcat上的相关信息:
03-05 19:15:15.020: D/LOOK(21325): 3
03-05 19:15:15.020: I/VALUE LIST(20883): 1 <<<<LIST HERE
03-05 19:15:15.040: D/LOOK(21325): 5
03-05 19:15:15.040: I/VALUE LIST(20883): 1 <<<<LIST HERE
如您所见,即使随机值不是 1,它也只存储值 1。我是不是使用了错误的数组类型或实现方式不正确?
我想看到的输出是这样的:
03-05 19:15:15.020: D/LOOK(21325): 3
03-05 19:15:15.020: I/VALUE LIST(20883): 3 <<<<LIST HERE
03-05 19:15:15.040: D/LOOK(21325): 5
03-05 19:15:15.040: I/VALUE LIST(20883): 3, 5 <<<<LIST HERE
因为,您的 ArrayList<Integer> ValList = new ArrayList<Integer>();
仅具有 Rand()
方法的局部作用域,因此每次您调用 Rand()
函数时它都有新的实例。
只需将 ArrayList<Integer> ValList = new ArrayList<Integer>();
声明为 class 级范围。
并使用,
喜欢,
// Class level member declaration
ArrayList<Integer> ValList = new ArrayList<Integer>();
public void Rand(){
Random rand = new Random();
int Val = rand.nextInt(5);
ValList.add(Val);
Log.d("LOOK", ValList.toString());
// Also here you are printing size of Arraylist not a content of arraylest
Log.i("VALUE LIST ", ValList.size()+" <<<<LIST HERE");
}
要打印特定的对象值,您必须使用带有对象位置的 .get()
从 ArrayList 获取对象,或者使用 .toString()
打印所有列表内容
Log.i("VALUE LIST ", ValList.toString()+" <<<<LIST items"); // using .toString() to print all contents of List
更新:
因为我怀疑这一行会抛出异常(但是从你的 logcat 来看它工作正常,因为列表只包含一个项目)
Log.d("LOOK", Integer.toString(ValList));
当您尝试打印列表 valList
的值时,只需使用 .toString()
,例如 ValList.toString()
您正在尝试打印列表的大小。
Log.i("VALUE LIST ", ValList.size()+" <<<<LIST HERE"); }
// 错误(根据问题)
如果您想知道数组包含什么,请尝试打印数组的内容。