Java 如何对数组中的项进行排序
我有一组52张牌 我想有一个方法,我可以混合后的卡战略布局的卡 首先,我将这些卡分成如下的数据包:Java 如何对数组中的项进行排序,java,Java,我有一组52张牌 我想有一个方法,我可以混合后的卡战略布局的卡 首先,我将这些卡分成如下的数据包: Card[] packetOne = new Card[cards.length / 2]; Card[] packetTwo = new Card[cards.length / 2]; for (int i = 0; i < (cards.length / 2); i++) { packetOne[i] = cards[i]; }
Card[] packetOne = new Card[cards.length / 2];
Card[] packetTwo = new Card[cards.length / 2];
for (int i = 0; i < (cards.length / 2); i++) {
packetOne[i] = cards[i];
}
for (int i = 0; i < packetTwo.length; i++) {
for (int c = cards.length / 2; c < cards.length; c++) {
packetTwo[i] = cards[c];
}
}
Card[] array3 = new Card[cards.length];
int i1 = 0;
int i2 = 0;
int i3 = 0;
while (i3 < array3.length) {
array3[i3++] = packetOne[i1++];
array3[i3++] = packetTwo[i2++];
}
Card[]packetOne=新卡[cards.length/2];
卡片[]packetTwo=新卡片[cards.length/2];
对于(int i=0;i<(cards.length/2);i++){
卡片[i]=卡片[i];
}
对于(int i=0;i
现在这些卡片已经分为两堆,我想把它们排列成一个新的数组,这样:第一包中的第一张卡片是第一张,之后是第二包中的第一张卡片,之后是第一包中的第二张卡片,在这张卡片之后是第二包中的第二张卡片,以此类推,直到所有卡片都完成为止
此外,如果卡片组中的卡片数量在任何时候都是奇数,则第一个数据包将比第二个数据包多出一张卡片,但排序思路相同
有人知道怎么做这类事情吗?Card[]sortedPacket=新卡[cards.length];
Card[] sortedPacket = new Card[cards.length];
int i = 0;
for (int j = 0; j < cards.length/2 ;j++) {
if (packetOne[j] != null) {
sortedPacket[i++] = packetOne[j];
}
if (packetTwo[j] != null) {
sortedPacket[i++] = packetTwo[j];
}
}
int i=0;
对于(int j=0;j
这将为packetOne/packetTwo中的每个元素编号循环,按照您指定的顺序添加Card[/sortedPacket=new Card[cards.length];
int i=0;
对于(int j=0;j
这将为packetOne/packetTwo中的每个元素编号循环,按照您指定的顺序添加我将使用3个索引,如下所示:
Card[] packetOne = new Card[cards.length / 2];
Card[] packetTwo = new Card[cards.length / 2];
for (int i = 0; i < (cards.length / 2); i++) {
packetOne[i] = cards[i];
}
for (int i = 0; i < packetTwo.length; i++) {
for (int c = cards.length / 2; c < cards.length; c++) {
packetTwo[i] = cards[c];
}
}
Card[] array3 = new Card[cards.length];
int i1 = 0;
int i2 = 0;
int i3 = 0;
while (i3 < array3.length) {
array3[i3++] = packetOne[i1++];
array3[i3++] = packetTwo[i2++];
}
我将使用3个索引,如下所示:
Card[] packetOne = new Card[cards.length / 2];
Card[] packetTwo = new Card[cards.length / 2];
for (int i = 0; i < (cards.length / 2); i++) {
packetOne[i] = cards[i];
}
for (int i = 0; i < packetTwo.length; i++) {
for (int c = cards.length / 2; c < cards.length; c++) {
packetTwo[i] = cards[c];
}
}
Card[] array3 = new Card[cards.length];
int i1 = 0;
int i2 = 0;
int i3 = 0;
while (i3 < array3.length) {
array3[i3++] = packetOne[i1++];
array3[i3++] = packetTwo[i2++];
}
如果您使用的是Java 8,那么有一个很好的简单方法可以使用streams实现这一点:
Card[] combinedPack = IntStream.range(0, cards.length/2).boxed()
.flatMap(i -> Stream.of(packetOne[i], packetTwo[i]))
.toArray(Card[]::new);
这将创建一个索引流,将这些索引映射到每个数据包中的新卡片流,然后再转换回一个数组。如果您使用的是Java 8,那么使用流有一个很好的简单方法:
Card[] combinedPack = IntStream.range(0, cards.length/2).boxed()
.flatMap(i -> Stream.of(packetOne[i], packetTwo[i]))
.toArray(Card[]::new);
这将创建一个索引流,将这些索引映射到每个数据包中的新卡流,然后再转换回一个数组。如果有奇数张卡,这仍然有效吗?如果有奇数,第一个数据包应该比第二个数据包多出一张卡。
for
中的第二个if
语句将确保对于最后的卡,如果packetTwo为空,而packetOne为空,则不会抛出错误。如果有奇数张卡,这是否仍然有效?如果有奇数,第一个数据包应该比第二个数据包多出一张卡。for
中的第二个if
语句将确保对于最后的卡,如果packetTwo为空而packetOne为空,则不会抛出错误。