ArrayList 的正数和负数

Positive and negative numbers with ArrayList

如何区分正数和负数?我有这个代码:

import java.util.ArrayList;
import java.swing.JOptionPane;

public class Test {
    public static void main(String[] args) {
        ArrayList al = new ArrayList();

        int num=Integer.parseInt(JOptionPane.showInputDialog("How many numbers?"));
        for (int i=0 ; i < num ; i++) {
            al.add(Integer.parseInt(JOptionPane.showInputDialog("What numbers?")));
        }
    }
}

假设我想添加 5 个数字。 -2, -7, 8, 4, -1

我需要输出 Positive = 8, 4Negative = -2, -7, -1

如果您只需要数组的输出,那么遍历数组一次就可以轻松快速地工作,即使对于大型数组也是如此。这样,您就可以使用 StringBuilder 对象来处理您的输出。

StringBuilder pos = new StringBuilder();
StringBuilder neg = new StringBuilder();

pos.append("Positive = ");
neg.append("Negative = ");

//note that 0 will be considered positive
for (int i = 0; i < al.size(); i++) {
    if (al.get(i) >= 0) {
        pos.append(al.get(i) + ", ");
    } else {
        neg.append(al.get(i) + ", ");
    }
}

//handles the extra "," at end of strings
pos.deleteCharAt(pos.length() - 2);
neg.deleteCharAt(neg.length() - 2);

System.out.println(pos.toString() + " and " + neg.toString());

如果您想做比简单输出更复杂的事情,我建议您使用 if 逻辑将单个整数分配给两个单独的数组。

另外请注意,您可能应该告诉 ArrayList 期望的对象类型:

ArrayList<int> al = new ArrayList<>();

如果你使用Java8,你可以使用stream轻松的将它们分开:

List<Integer> positive = new ArrayList<>();
List<Integer> negative = new ArrayList<>();
al.stream().forEach(i -> (i < 0 ? negative : positive).add(i));
System.out.println(positive);
System.out.println(negative);

您有两个列表,一个包含正面,另一个包含负面。

您的问题的解决方案:

public class Test {

    public static void printValues(ArrayList<Integer> list)
    {
        StringBuilder positive = new StringBuilder("Positive = ");
        StringBuilder negative = new StringBuilder("Negative = ");
        for (Integer i : list)
        {
            if (i >= 0)
            {
                positive.append(i).append(", ");
            }
            else
            {
                negative.append(i).append(", ");
            }
        }
        positive.delete(positive.length() - 2, positive.length());
        negative.delete(negative.length() - 2, negative.length());
        System.out.println(positive.toString());
        System.out.println(negative.toString());
    }

    public static void main(String[] args) {
        ArrayList al = new ArrayList();

        int num=Integer.parseInt(JOptionPane.showInputDialog("How many numbers?"));
        for (int i=0 ; i < num ; i++) {
            al.add(Integer.parseInt(JOptionPane.showInputDialog("What numbers?")));       
        }
        printValues(al);
    }
}

或者您可以使用 lambda 表达式和流

public class Test {

    public static void printValues(ArrayList<Integer> list)
    {
        StringBuilder positive = new StringBuilder("Positive = ");
        StringBuilder negative = new StringBuilder("Negative = ");

        list.stream().forEach(i -> (i < 0 ? negative : positive).append(i).append(", "));

        positive.delete(positive.length() - 2, positive.length());
        negative.delete(negative.length() - 2, negative.length());
        System.out.println(positive.toString());
        System.out.println(negative.toString());
    }

    public static void main(String[] args) {
        ArrayList al = new ArrayList();

        int num=Integer.parseInt(JOptionPane.showInputDialog("How many numbers?"));
        for (int i=0 ; i < num ; i++) {
            al.add(Integer.parseInt(JOptionPane.showInputDialog("What numbers?")));
        }
        printValues(al);
    }
}