Java 在其他数组中分离数组
我有一个数组,我需要将其拆分为不同的数组。我有一个字符串数组,需要将其拆分为不同的页面(不同的数组) 首先,我使用Java 在其他数组中分离数组,java,arrays,Java,Arrays,我有一个数组,我需要将其拆分为不同的数组。我有一个字符串数组,需要将其拆分为不同的页面(不同的数组) 首先,我使用 int size = array.length; 然后,我得到了我需要的页数,知道每个页面应该只有10个字符串 int numberOfPages = (int) Math.floor(size/10); 然后用户选择要查看的页面 int pageSelected = 2; 之后,我尝试拆分数组,但出现了一些异常。我试过: Arrays.copyOfRange(array,(
int size = array.length;
然后,我得到了我需要的页数,知道每个页面应该只有10个字符串
int numberOfPages = (int) Math.floor(size/10);
然后用户选择要查看的页面
int pageSelected = 2;
之后,我尝试拆分数组,但出现了一些异常。我试过:
Arrays.copyOfRange(array,(0+10*(pageSelected-1),10*10+(pageSelected-1)));
当我尝试打印新数组的值时,会出现异常
是否仍要在“页面”中拆分数组,并将这些“页面”显示为请求
@编辑1
我得到一个空指针异常错误可能发生在这一行:
Arrays.copyOfRange(array,(0+10*(pageSelected-1),10*10+(pageSelected-1)));
括号中有错误(该方法需要三个参数,但从该方法的角度来看,您只提供了两个参数:最后两个参数按括号分组)。您可以使用:
Arrays.copyOfRange(array,10*(pageSelected-1),10*10+(pageSelected-1));
(已删除0+
,因为这没有任何用处)
此外,您还犯了一个语义错误:10*10+(pageSelected-1)
应替换为:10+10*(pageSelected-1
因此,全文如下:
Arrays.copyOfRange(array,10*(pageSelected-1),10+10*(pageSelected-1));
尽管更好的指导原则是使用小步骤:
int i = pageSelected-1;
int g = 10*i;
Arrays.copyOfRange(array,g,g+10);//do something with the result
为了做到完美,您最好使用常量变量,这样-如果您改变主意-您可以轻松修改每页的项目数:
int i = pageSelected-1;
int perpage = 10;
int g = perpage*i;
Arrays.copyOfRange(array,g,g+perpage);//do something with the result
最后一句话:正如@j_v_wow_d所说,您应该ceil
部门,否则您将为11
项生成一页。因此numberOfPages
的正确代码为:
int numberOfPages = (int) Math.ceil((double) size/perpage);
你只需要做
size/10
;不需要floor
或铸造它
另外,表达式10*10+(pageSelected-1)
中的应该是10+(10*(pageSelected-1))
我想你的意思是:)
查看第二个逗号后的+
和*
的位置
但是,如果不是一行,阅读起来会更容易
int offset = 10 * (pageSelected - 1);
Arrays.copyOfRange(array, offset, offset + 10);
甚至更好
public static final int PER_PAGE = 10;
/* (...) */
int offset = PER_PAGE * (pageSelected - 1);
Arrays.copyOfRange(array, offset, offset + PER_PAGE);
如果选定的页面
已编制索引,因此0是第一个:
String[] array = {"a", "b", "c", "d", "e", "f"};
int pageSize = 2;
int pageSelected = 2;
final String[] pageData =
Arrays.copyOfRange(
array,
(pageSelected * pageSize),
(pageSelected * pageSize) + pageSize);
结果是pageData
包含[“e”,“f”]。您会得到什么异常?您会得到什么异常。你从哪里得到它?你能粘贴stacktrace吗?异常是一个空指针stacktrace是无用的,因为它是由Bukkit生成的,没有关于code@j_v_wow_d:它应该是Math.ceil((double)size/10)
,因为已经有整数除法了。还有一个小括号错误。。。但这确实不是重要的部分。对于我的学习目标,你能解释一下10*(pageSelected-1)是什么意思吗?op是如何得出的?10
是每页的项目数。OP使用pageSelected
的1
偏移量。因此,您可以减小它以获得Java数组索引。获取真实页面(pageSelected-1
)。然后将其乘以10
,因为每页都有10
项。获取偏移项。每个页面都在数组的每个索引中,或者从0到9计数为一个页面?我猜OP通过打印网页或显示这些项的内容来处理子数组。当然,我们也可以用计算出的偏移量来计算指数。通过复制它,事情可以做得简单一点。很好的解释,我认为你应该把它添加到你的帖子中,使之更完美谢谢
public static final int PER_PAGE = 10;
/* (...) */
int offset = PER_PAGE * (pageSelected - 1);
Arrays.copyOfRange(array, offset, offset + PER_PAGE);
String[] array = {"a", "b", "c", "d", "e", "f"};
int pageSize = 2;
int pageSelected = 2;
final String[] pageData =
Arrays.copyOfRange(
array,
(pageSelected * pageSize),
(pageSelected * pageSize) + pageSize);