ArrayList不存储值

Phi*_*992 0 java random android arraylist logcat

我是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"); }
Run Code Online (Sandbox Code Playgroud)

此过程在oncreate中调用,然后返回到循环中.理想情况下,每次运行此类时,新的随机数将按顺序添加到数组中.

这是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
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,即使随机值不是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
Run Code Online (Sandbox Code Playgroud)

use*_*305 10

因为,你只有方法的ArrayList<Integer> ValList = new ArrayList<Integer>();本地范围Rand(),所以每次调用Rand()函数时它都有新的实例.

只需声明ArrayList<Integer> ValList = new ArrayList<Integer>();为类级别范围.

并使用,

喜欢,

// 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"); 
 }
Run Code Online (Sandbox Code Playgroud)

要打印特定的对象值,您必须使用.get()对象的位置从ArrayList获取对象,或者使用.toString()打印所有列表内容

Log.i("VALUE LIST ", ValList.toString()+" <<<<LIST items"); // using .toString() to print all contents of List
Run Code Online (Sandbox Code Playgroud)

更新:

因为我怀疑这行抛出异常(但从你的logcat它的工作正常,因为列表只包含一个项目)

Log.d("LOOK", Integer.toString(ValList)); 
Run Code Online (Sandbox Code Playgroud)

在您尝试打印列表值时valList,只需使用.toString(),ValList.toString()

  • 这些答案都解决了OP的问题.不要让它成为一个小便. (3认同)
  • 您重复了OP正在打印List的大小而不是内容的错误. (2认同)