I have a Map where Coords is defined as so:
我有一个地图,Coords定义如下:
class Coords {
int x;
int y;
public boolean equals(Object o) {
Coords c = (Coords)o;
return c.x==x && c.y==y;
}
public Coords(int x, int y) {
super();
this.x = x;
this.y = y;
}
public int hashCode() {
return new Integer(x+"0"+y);
}
}
(not very good, I know, please don't tease me.) How can I now create a String where the characters are mapped from this map, for example:
(不是很好,我知道,请不要取笑我。)我现在如何创建一个字符串,从这个地图映射字符,例如:
Map<Coords, Character> map = new HashMap<Coords, Character>();
map.put(new Coords(0,0),'H');
map.put(new Coords(1,0),'e');
map.put(new Coords(2,0),'l');
map.put(new Coords(3,0),'l');
map.put(new Coords(4,0),'o');
map.put(new Coords(6,0),'!');
map put(new Coords(6,1),'!');
somehowTransformToString(map); //Hello !
// !
Thanks,
Isaac Waller
(note - it's not homework)
谢谢,艾萨克沃勒(注意 - 这不是作业)
2 个解决方案
#1
-
Create a comparator which can sort Coords by y and then x:
创建一个比较器,可以按y然后x对Coords进行排序:
int d = c1.y - c2.y; if (d == 0) d = c1.x - c2.y; return d;
-
Create a sorted map:
创建有序地图:
TreeMap<Coords, Character> sortedMap = new TreeMap(comparator); sortedMap.putAll(map); // copy values from other map
-
Print the values of the map in order:
按顺序打印地图的值:
for (Character c: map.values()) System.out.print(c);
-
If you need newlines:
如果您需要换行:
int y = -1; for (Map.Entry<Coords, Character> e: map.entrySet()) { if (e.y != y) { if (y != -1) System.out.println(); y = e.y; } System.out.print(c); }
#2
I suggest you add a toString method to Coord or use the Point class.
我建议你向Coord添加一个toString方法或使用Point类。
Map<Point, Character> map = new HashMap<Point , Character>();
map.put(new Point(0,0),'H');
map.put(new Point(1,0),'e');
map.put(new Point(2,0),'l');
map.put(new Point(3,0),'l');
map.put(new Point(4,0),'o');
map.put(new Point(6,0),'!');
map put(new Point(6,1),'!');
String text = map.toString();
If you want to layout the characters you could use multi dimensional array.
如果要布局字符,可以使用多维数组。
char[][] grid = new char[7][2];
grid[0][0] ='H';
grid[0][1] ='e';
grid[0][2] ='l';
grid[0][3] ='l';
grid[0][4] ='o';
grid[0][6] ='!';
grid[1][6] ='!';
for(char[] line: grid) System.out.println(new String(line));
#1
-
Create a comparator which can sort Coords by y and then x:
创建一个比较器,可以按y然后x对Coords进行排序:
int d = c1.y - c2.y; if (d == 0) d = c1.x - c2.y; return d;
-
Create a sorted map:
创建有序地图:
TreeMap<Coords, Character> sortedMap = new TreeMap(comparator); sortedMap.putAll(map); // copy values from other map
-
Print the values of the map in order:
按顺序打印地图的值:
for (Character c: map.values()) System.out.print(c);
-
If you need newlines:
如果您需要换行:
int y = -1; for (Map.Entry<Coords, Character> e: map.entrySet()) { if (e.y != y) { if (y != -1) System.out.println(); y = e.y; } System.out.print(c); }
#2
I suggest you add a toString method to Coord or use the Point class.
我建议你向Coord添加一个toString方法或使用Point类。
Map<Point, Character> map = new HashMap<Point , Character>();
map.put(new Point(0,0),'H');
map.put(new Point(1,0),'e');
map.put(new Point(2,0),'l');
map.put(new Point(3,0),'l');
map.put(new Point(4,0),'o');
map.put(new Point(6,0),'!');
map put(new Point(6,1),'!');
String text = map.toString();
If you want to layout the characters you could use multi dimensional array.
如果要布局字符,可以使用多维数组。
char[][] grid = new char[7][2];
grid[0][0] ='H';
grid[0][1] ='e';
grid[0][2] ='l';
grid[0][3] ='l';
grid[0][4] ='o';
grid[0][6] ='!';
grid[1][6] ='!';
for(char[] line: grid) System.out.println(new String(line));