做作业,我被困住了。
假设我有一个数组颜色:
["blue", "orange", "green", "black", "red" ]
这些颜色出现在文本中。当颜色出现时,有另一个数组将行号存储在另一个数组(位置数组)中。
[17,4,5,8,8]
现在我想按升序行出现打印,输出结果如下:
orange
green
black
red
blue
我使用Arrays.sort()对位置数组进行排序。 我相信这应该使用职位来完成。
例如,对于打印橙色,排序数组与数组颜色的颜色位置有关系。
你能指点我吗?
当我开始学习java时,这是最简单的方法。
答案 0 :(得分:2)
您需要将索引相互关联。我建议你在课堂上进行(可能是一个Pair
类,其中包含String color
和int line
属性。
class Pair {
public String color;
public int line;
public Pair(String color, int line) {
this.color = color;
this.line = line;
}
}
构建配对对象的数组(或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]));
使用Pair
(或Comparator
)方法,使用Arrays.sort
对Collection.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
。
使用循环打印数组
答案 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
}