Java 是否有一种方法可以从每行的数组中打印出不同数量的元素
我希望能够在每一行上打印出数组中不同数量的元素Java 是否有一种方法可以从每行的数组中打印出不同数量的元素,java,arrays,string,Java,Arrays,String,我希望能够在每一行上打印出数组中不同数量的元素 String[] name = {"Alix", "Jack", "Alexis", "Adam", "John", "Lexi", "George", "Gregory", "Paul", "Bjorn", "Aaron", "Joseph", "Anderson"}; System.out.println(Arrays.toString(name)); 这个的输出会给我 [Alix, Jack,
String[] name = {"Alix", "Jack", "Alexis", "Adam", "John", "Lexi",
"George", "Gregory", "Paul", "Bjorn", "Aaron", "Joseph", "Anderson"};
System.out.println(Arrays.toString(name));
这个的输出会给我
[Alix, Jack, Alexis, Adam, John, Lexi, George, Gregory, Paul, Bjorn, Aaron, Joseph, Anderson]
但我希望输出的内容与
[Alix, Jack, Alexis]
[Adam, John, Lexi]
[George, Gregory]
[Paul, Bjorn, Aaron, Joseph, Anderson]
有办法做到这一点吗?在我的示例中,每行中的元素数量并不是一成不变的,重要的是我可以改变输出中每行中出现的名称数量。谢谢您可以手动拆分阵列并使用
copyOfRange
方法
import java.util.Arrays;
public class HelloWorld {
public static void main(String []args){
String[] name = {"Alix", "Jack", "Alexis", "Adam", "John", "Lexi",
"George", "Gregory", "Paul", "Bjorn", "Aaron", "Joseph", "Anderson"};
int splitArrayForSize = 3;
for(int i=0; i< name.length; i+=splitArrayForSize){
String[] subArray = Arrays.copyOfRange(name, i,
Math.min(name.length, i + splitArrayForSize));
String subArrayAsString = Arrays.toString(subArray);
System.out.println(subArrayAsString);
}
}
}
我相信有一种更简单、更实用的方法来实现这一点。我对这种方法很感兴趣。这里有一个示例,可以让您为每个列表提供一个大小列表,这样您就可以轻松生成所指示的输出,而不必在每个列表中有3个名称:
package com.inlet.ifserver;
import java.util.Arrays;
public class x {
public static void main(String ...args) {
String[] name = {"Alix", "Jack", "Alexis", "Adam", "John", "Lexi",
"George", "Gregory", "Paul", "Bjorn", "Aaron", "Joseph", "Anderson"};
int[] counts = { 3, 3, 2 };
int start = 0;
for (int count : counts) {
int end = Integer.min(start + count, name.length);
if (end == start)
break;
System.out.println(Arrays.toString(Arrays.copyOfRange(name, start, end)));
start = end;
}
if (start < name.length)
System.out.println(Arrays.toString(Arrays.copyOfRange(name, start, name.length)));
}
}
正如@Sid所提到的
Arrays.copyOfRange
就是这个方法。本例提供了不同块长度的数组,因此它与问题中的预期输出相匹配。看起来像这样
public static void printInBlocks(String[] arr, int[] blocks) {
int idx = 0;
for (int blockSize: blocks) {
String str = Arrays.toString(Arrays.copyOfRange(name, idx, idx += blockSize));
System.out.println(str);
}
}
public static void main(String[] args) {
String[] name = {"Alix", "Jack", "Alexis", "Adam", "John", "Lexi",
"George", "Gregory", "Paul", "Bjorn", "Aaron", "Joseph", "Anderson"};
int[] blocks = {3, 3, 2, 5};
printInBlocks(name, blocks);
}
然后,您可以像这样从Main
调用它
public static void printInBlocks(String[] arr, int[] blocks) {
int idx = 0;
for (int blockSize: blocks) {
String str = Arrays.toString(Arrays.copyOfRange(name, idx, idx += blockSize));
System.out.println(str);
}
}
public static void main(String[] args) {
String[] name = {"Alix", "Jack", "Alexis", "Adam", "John", "Lexi",
"George", "Gregory", "Paul", "Bjorn", "Aaron", "Joseph", "Anderson"};
int[] blocks = {3, 3, 2, 5};
printInBlocks(name, blocks);
}
输出看起来像
[Alix, Jack, Alexis]
[Adam, John, Lexi]
[George, Gregory]
[Paul, Bjorn, Aaron, Joseph, Anderson]
注
包含每行项目数的
块
的总和必须等于项目数名称
您可以根据大小拆分数组,然后打印它们。我是否需要使用ArrayList来完成此操作?不要太快地向上投票,并接受实际上不符合您要求的答案(你可以改变主意)。@Sid。你没有回答那家伙的问题。他说每行的项目数量不是“一成不变的”,在他的例子中,每一行上的名字数量在不同的行之间是不同的。-乔说得对!@Steve只要有帮助,我同意接受任何答案。我们都使用数组。copyOfRange
,它是@Sid首先发布的。这是解决方案的核心,其余的只是“味道”@Sid,但这无助于社区接受一个没有给出您指定输出的答案,特别是当有其他人这样做时。@Steve这是我同意的。如果其他答案更好,我同意。记住,不是我接受了这个答案。我们可以敦促OP接受另一个更好的答案。Joe的答案是更健壮。@molamk,我认为如果你不在块列表中给出正确的数字,你的会崩溃。Joe's会尽其所能处理它给出的任何列表,并且忽略超出输入列表允许范围的组大小。我完全同意这一点,它更健壮。问题不在于“健壮性”如果是这样的话,我们将编写空检查、单元测试和溢出测试