Java打印基于位置

时间:2011-10-07 15:12:26

标签: java

做作业,我被困住了。

假设我有一个数组颜色:

["blue", "orange", "green", "black", "red" ]

这些颜色出现在文本中。当颜色出现时,有另一个数组将行号存储在另一个数组(位置数组)中。

[17,4,5,8,8]

现在我想按升序行出现打印,输出结果如下:

orange
green
black
red
blue

我使用Arrays.sort()对位置数组进行排序。 我相信这应该使用职位来完成。

例如,对于打印橙色,排序数组与数组颜色的颜色位置有关系。

你能指点我吗?

当我开始学习java时,这是最简单的方法。

4 个答案:

答案 0 :(得分:2)

  1. 您需要将索引相互关联。我建议你在课堂上进行(可能是一个Pair类,其中包含String colorint line属性。

    class Pair {
        public String color;
        public int line;
        public Pair(String color, int line) {
            this.color = color;
            this.line  = line;
        }
    }
    
  2. 构建配对对象的数组(或List<Pair>)。

    String[] colors = new String[] {"blue", "orange", "green", "black", "red"};
    int[] lines     = new int[]    {    17,        4,       5,       8,     8};
    
    List<Pair> pairs = new LinkedList<Pair>();
    for (int i = 0; i < colors.length; i++)
        pairs.add(new Pair(colors[i], lines[i]));
    
  3. 使用Pair(或Comparator)方法,使用Arrays.sortCollection.sort s数组进行排序,具体取决于您的line属性。

    Collections.sort(pairs, new Comparator<Pair>() {
        public int compare(Pair p1, Pair p2) {
            return Integer.valueOf(p2.line).compareTo(p1.line);
        }
    });
    

    另一种选择是在Comparable<Pair>中实施Pair

  4. 使用循环打印数组

答案 1 :(得分:0)

我可能会使用SortedMap

答案 2 :(得分:0)

这适用于我和输出:

  

橙色 - 4
  绿色 - 5
  黑色 - 8
  红色 - 8
  蓝色 - 17

例如:

public class Test
{  
    public String color;
    public int line;

    Test(String color, int line) {
        this.color = color;
        this.line = line;
    }

    public static void main(String[] args) 
    {
        String[] colors = new String[] { "blue", "orange", "green", "black", "red" };
        int[] lineNumber = new int[] { 17,4,5,8,8 };

        LinkedList<Test> out = new LinkedList<Test>();

        // add first element
        out.add(new Test(colors[0], lineNumber[0]));

        Loop: for(int i = 1; i < colors.length; i++) {
            for(int j = 0; j < out.size(); j++) {
                if(lineNumber[i] < out.get(j).line) {
                    out.add(j, new Test(colors[i], lineNumber[i]));
                    continue Loop;
                }
            }

            out.addLast(new Test(colors[i], lineNumber[i]));
        }

        for(Test t : out) {
            System.out.println(t.color + " - "+t.line);         
        }
    }      
}

答案 3 :(得分:0)

您可以使用HashMap。 因此,对于每种颜色,您都可以通过颜色名称获得Key 对于那个键,你需要某种整数列表。

所以我建议的是......

Map<String color, List<Integer> location> hashMap = new HashMap<String Color, List<Integer> location>();

如果你想添加一个职位。

hashMap.get("orange").add(1);

表示您想要获取橙色列表并将值1添加到该列表中。

因此,如果您想迭代该列表,您可以这样做..

List<Integer> location = hashMap.get("orange"); returning the whole orange list

然后

for(Integer int : location)
{
   //Do whatever
}