如何用Java中的数组显示某些数字?

时间:2018-05-17 20:53:21

标签: java arrays sorting numbers

我想在一行中只列出正数而在一行中只列出负数,但它们只用文本逐一显示。 这是我的代码:

int[] array = {2, -5, 4, 12, 54, -2, -50, 150};
    Arrays.sort(array);
    for (int i = 0; i < array.length; i++) {
        if (array[i] < 0) {
            System.out.println("Less than 0: " + array[i]);

        } else if (array[i] > 0) {
            System.out.println("Greater than 0: " + array[i]);
        }

    }

6 个答案:

答案 0 :(得分:6)

您当前正在为每个元素打印一行(以及是否小于0或大于0),而是使用IntStreamfilter()来表示所需元素(并收集) Collectors.joining())的人。像,

int[] array = { 2, -5, 4, 12, 54, -2, -50, 150 };
Arrays.sort(array);
System.out.println("Less than 0: " + IntStream.of(array) //
        .filter(x -> x < 0).mapToObj(String::valueOf).collect(Collectors.joining(", ")));
System.out.println("Greater than 0: " + IntStream.of(array) //
        .filter(x -> x > 0).mapToObj(String::valueOf).collect(Collectors.joining(", ")));

输出

Less than 0: -50, -5, -2
Greater than 0: 2, 4, 12, 54, 150

你可以用一对StringJoiner(s)和for-each循环以及(仅仅因为)格式化的io来获得相同的结果。像,

int[] array = { 2, -5, 4, 12, 54, -2, -50, 150 };
Arrays.sort(array);
StringJoiner sjLess = new StringJoiner(", ");
StringJoiner sjGreater = new StringJoiner(", ");
for (int x : array) {
    if (x < 0) {
        sjLess.add(String.valueOf(x));
    } else if (x > 0) {
        sjGreater.add(String.valueOf(x));
    }
}
System.out.printf("Less than 0: %s%n", sjLess.toString());
System.out.printf("Greater than 0: %s%n", sjGreater.toString());

答案 1 :(得分:4)

由于您对值进行了排序,因此您知道所有负值都在正值之前,因此您开始打印值,然后在遇到第一个正值时切换到新行。

E.g。如下所示,它也可以处理所有负值的数组,所有正值的数组,甚至是一个空数组。

这只使用你已经知道的Java结构。

int[] array = {2, -5, 4, 12, 54, -2, -50, 150};
Arrays.sort(array);
for (int i = 0, iFirstPositive = 0; i < array.length; i++) {
    if (array[i] < 0)
        iFirstPositive = i + 1; // Assume index of first positive value is next
    if (i == iFirstPositive) {
        if (i != 0)
            System.out.println(); // End line of negative values
        System.out.print("Greater than 0: "); // Start line of positive values
    } else if (i == 0) {
        System.out.print("Less than 0: "); // Start line of negative values
    } else {
        System.out.print(", ");
    }
    System.out.print(array[i]);
}
if (array.length != 0) {
    System.out.println(); // End line if anything printed
}

输出

Less than 0: -50, -5, -2
Greater than 0: 2, 4, 12, 54, 150

更简单,但稍微不那么优化,你也可以用两个循环来做:

int[] array = {2, -5, 4, 12, 54, -2, -50, 150};
Arrays.sort(array);
System.out.print("Less than 0:");
for (int i = 0; i < array.length; i++) {
    if (array[i] < 0) {
        System.out.print(" " + array[i]);
    }
}
System.out.println();
System.out.print("Greater than 0:");
for (int i = 0; i < array.length; i++) {
    if (array[i] > 0) {
        System.out.print(" " + array[i]);
    }
}
System.out.println();

输出

Less than 0: -50 -5 -2
Greater than 0: 2 4 12 54 150

答案 2 :(得分:3)

做这样的事情:

Arrays.sort(array);
String negative = "Less than 0: ";
String positive = "Greater than 0: ";
for (int i = 0; i < array.length; i++) {
    if (array[i] < 0) {
        negative.concat(array[i] + ",");
    } 
    else (array[i] > 0) {
       positive.concat(array[i] + ",");
    }
}
System.out.println(positive);
System.out.println(negative);

将值存储在字符串中,然后在for循环后打印它们。

答案 3 :(得分:2)

我尝试尽可能少地更改您的代码。

int[] array = { 2, -5, 4, 12, 54, -2, -50, 150 };
Arrays.sort(array);
boolean firstHalf = true;
System.out.print("Less than 0: ");

for (int i = 0; i < array.length; i++) {
    if (array[i] < 0) {
        System.out.print(array[i] + " ");
    } else if (array[i] > 0) {
        if (firstHalf){
            System.out.print("\nGreater than 0: ");
            firstHalf = false;
        }
        System.out.print(array[i] + " ");
    }

}

答案 4 :(得分:2)

这是流的完美用例:

System.out.println(Arrays.stream(array).filter(n -> n < 0).collect(Collectors.toList()));

答案 5 :(得分:0)

我认为使用partitioningBy(在java 8中引入)正是出于这种情况。你也不需要对数组进行排序。

Map<Boolean,List<Integer>> map = IntStream.range(0,array.length)
                .mapToObj(i->array[i])
                .collect(Collectors.partitioningBy(a->a>0));

打印正数

map.get(true).forEach(integer -> System.out.print(integer+","));  

打印负数

map.get(false).forEach(integer -> System.out.print(integer+","));  

如果你想对它进行排序,你可以像下面那样进行排序。

map.get(false).stream().sorted()....