我正在使用给定的代码在列表视图中生成序列号,最多可达 11 位数字的特定范围。最多十位数字,生成的序列如 0333624140 至 0333624160(例如 0333624140,0333624141,0333624142,0333624143 等),但如果我们将所需的值更改为 11 位数字,如 03336241441 至 03336241450然后应用程序崩溃。
btngenerate.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int value1; int value2; value1 = Integer.parseInt(txtfirst.getText().toString()); value2 = Integer.parseInt(txtsecond.getText().toString()); for(int i=value1;i<=value2;i++){ list.add(""+i); li.setAdapter(arrayAdapter); } } });
我自己并在大家的帮助下解决了我需要的解决方案。我将其展示在这里,以便其他人可以获得有关它的信息。不管怎样,我发自内心地感谢你们~
btngenerate.setOnClickListener(new View.OnClickListener() { @SuppressLint("DefaultLocale") @Override public void onClick(View view) { try { long value1; long value2; value1 = Long.parseLong(txtfirst.getText().toString()); value2 = Long.parseLong(txtsecond.getText().toString()); for(Long i = (Long) value1; i<=value2; i++) { list.add(String.format("%011d", i)); li.setAdapter(arrayAdapter); } } catch (NumberFormatException e) { e.printStackTrace(); } } });
对于如何编写此代码来说,这是一个完全破碎的想法。您正在创建一个数组,其中可以包含 11 位长的每个数字。那是 110 亿件物品。即使每个对象只占用 8 个字节(4 个用于值,4 个用于引用。实际情况会比这个多),这也是 880 亿字节,即大约 9.5 gb。那永远不会适合记忆,在那之前你就会 oom way。
有很多方法可以做到这一点。您的适配器不需要包含其中每个项目的数组,因为它是一个连续范围,它只需要开始和结束索引,并且可以根据开始索引和偏移量计算每个索引的值。但是拥有每个值的列表是行不通的。
以上是如何生成指定范围的 11 位序列号?的详细内容。更多信息请关注PHP中文网其他相关文章!