我有一个我需要在不同数组中拆分的数组。我有一个字符串数组,需要将它分成不同的页面(不同的数组)。
首先,我使用
获取数组的长度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)));
当我尝试打印新数组的值时出现异常。
无论如何都要在'页面中拆分数组,并显示这些'页面'作为请求者?
@ EDIT1 我得到一个Nullpointer异常
答案 0 :(得分:3)
错误可能发生在这一行:
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);
答案 1 :(得分:2)
如果pageSelected
被编入索引,那么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"]。
答案 2 :(得分:1)
你可以做size / 10
;无需floor
或投下它。
此外,from
表达式10*10+(pageSelected-1)
应为10 + (10 * (pageSelected - 1))
。
答案 3 :(得分:1)
Arrays.copyOfRange(array,(0+10*(pageSelected-1),10*10+(pageSelected-1)));
我认为你的意思是:)
Arrays.copyOfRange(array,0+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);