Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在其他数组中分离数组_Java_Arrays - Fatal编程技术网

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