在其他数组中分隔数组

时间:2014-12-30 23:40:48

标签: java arrays

我有一个我需要在不同数组中拆分的数组。我有一个字符串数组,需要将它分成不同的页面(不同的数组)。

首先,我使用

获取数组的长度
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异常

4 个答案:

答案 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);