java - 数组列表排序

标签 java arrays sorting arraylist

我需要使用数组列表对偶数和奇数进行排序

import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;

public class SortedEvensAndOdds {

public static void main(String[] args) {
    Random rnd = new Random();
    ArrayList<Integer> evenPrint = new ArrayList<Integer>();
    ArrayList<Integer> oddPrint = new ArrayList<Integer>();
    int odd[] = new int[25];
    int numOdd = 0;
    int even [] = new int[25];
    int numEven = 0;
    for (int i=0;i<25;i++) {
        int num = rnd.nextInt((100 - 1) + 1) + 1;
        if (num%2 ==0) {
            even[numEven] = num;
            numEven++;
        } 
        else {
            odd[numOdd] = num;
            numOdd++;
        }
    }
    for (int i = 0; i < even.length; i++)
        evenPrint.add(even[i]);
    for (int i = 0; i < even.length; i++)
        oddPrint.add(odd[i]);
    Collections.sort(evenPrint);
    Collections.sort(oddPrint);
    System.out.println("Even:");
    for (int i=0;i<numEven;i++) 
        System.out.print(evenPrint.get(i)  + " ");
    System.out.println("\nOdd:");
    for (int i=0;i<numOdd;i++) 
        System.out.print(oddPrint.get(i)  + " ");


}
}

这是我的输出

Even:
0 0 0 0 0 0 0 0 0 6 6 14 28 36 38 54  
Odd:
0 0 0 0 0 0 0 0 0 

如何防止全为 0

顺便说一句,如果我取出“Collections.sort()”方法,它将是

Even:
16 32 22 54 90 70 50 60 40 12 60 78 86 52 
Odd:
59 35 53 35 87 67 75 33 75 59 87 

所以这告诉我排序出了问题 请帮忙

最佳答案

当你创建一个像这样的数组时:int odd[] = new int[25];你得到的是一个由 0 组成的数组,其中有 25 个。这是因为 int 不能为 null。

因此,当您对数组末尾的所有零进行排序时,它们都会移至数组 fe 的开头。在将 1,5,9,13,19,0,0,0,0 排序为 0,0,0,0,1,5,9,13,19 之前code> 并且因为您只打印到索引,您知道您在那里分配了号码

for (int i=0;i<numEven;i++) 
    System.out.print(evenPrint.get(i)  + " ");

注意 numEven。它没有打印整个数组。要打印整个数组,您应该使用:

for (int i = 0; i < evenPrint.size(); i++)
    System.out.print(evenPrint.get(i) + " ");

你会得到这样的结果:

0 0 0 0 0 0 0 0 0 0 0 0 10 32 32 38 40 50 60 64 70 74 82 88 96

如何防止这种情况发生?

不要将数组的每个元素都放入列表中。变化:

for (int i = 0; i < even.length; i++)
    evenPrint.add(even[i]);
for (int i = 0; i < even.length; i++)
    oddPrint.add(odd[i]);

至:

for (int i = 0; i < numEven; i++)
    evenPrint.add(even[i]);
for (int i = 0; i < numOdd; i++)
    oddPrint.add(odd[i]);

关于java - 数组列表排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42638296/

相关文章:

java - 无法从 oozie.action.conf.xml 检索属性

c - 在 C 中使用 fscanf 将文本文档的内容扫描到数组中

java - Solr 排序问题

angularjs - Angular Grid中的自定义排序-不区分大小写

java - 使用 Java 中的套接字编程将数据流从客户端程序(在虚拟机中运行)发送到服务器程序(在主机操作系统上)

java - 无法弄清楚正在使用 MOD 函数的查询

java - 抛出自己的异常

c++ - 为什么 Clang 决定允许在 C++ 中指定初始化器?

java - 更改 JTextArea 中的文本

c - 在 C 语言中对文件中的数组进行排序