我是JAVA初学者.问题是关于JAVA中符号所占位情况.问题源及源代码如下(源代码后面有 状况描述 及 提问 ):
ACCP5.0 S1 JAVA 项目
骑士飞行棋,地图Map()如下:package s1java.xmal1;public class Map {
int[] map = new int[100]; // 对战地图 int[] luckyTurn = { 6, 23, 40, 55, 69, 83 }; // 幸运轮盘 int[] landMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 }; // 地雷位置 int[] pause = { 9, 27, 60, 93 }; // 暂停 int[] timeTunnel = { 20, 25, 45, 63, 72, 88, 90 }; // 时空隧道 /**
 * 生成地图: 关卡代号为:1:幸运轮盘 2:地雷 3: 暂停 4:时空隧道 0:普通
 */
public void createMap() {
int i = 0; // 在对战地图上设置幸运轮盘
for (i = 0; i < luckyTurn.length; i++) {
map[luckyTurn[i]] = 1;
} // 在对战地图上设置地雷
for (i = 0; i < landMine.length; i++) {
map[landMine[i]] = 2;
} // 在对战地图上设置暂停
for (i = 0; i < pause.length; i++) {
map[pause[i]] = 3;
} // 在对战地图上设置时空隧道
for (i = 0; i < timeTunnel.length; i++) {
map[timeTunnel[i]] = 4;
}
} /**
 * 显示地图关卡对应的图形
 * 
 * @param i
 *            地图当前位置的关卡代号
 * @param index
 *            当前地图位置编号
 * @param playerPos1
 *            玩家1的当前位置
 * @param playerPos2
 *            玩家2的当前位置
 * @return 地图当前位置的对应图片
 */
public String getGraph(int i, int index, int playerPos1, int playerPos2) {
String graph = "";
if (index == playerPos1 && index == playerPos2) {
graph = "@@";
} else if (index == playerPos1) {
// graph = "♀";
graph = "A";
} else if (index == playerPos2) {
// graph = "♂";
graph = "B";
} else {
switch (i) {
case 1: // 幸运轮盘
graph = "¤";
break;
case 2: // 地雷
graph = "★";
break;
case 3: // 暂停
graph = "■";
break;
case 4: // 时光隧道
graph = "〓";
break;
default:
graph = "∷";
break;
}
}
return graph;
} /**
 * 输出地图的奇数行(第1、3行)
 * 
 * @param start
 *            输出的起始点在地图上的位置
 * @param end
 *            输出的结束点在地图上的位置
 * @param playerPos1
 *            玩家1的当前位置
 * @param playerPos2
 *            玩家2的当前位置
 */
public void showLine1(int start, int end, int playerPos1, int playerPos2) {
for (int i = start; i < end; i++) {
System.out.print(getGraph(map[i], i, playerPos1, playerPos2));
}
} /**
 * 输出地图的偶数行(第2行)
 * 
 * @param start
 *            输出的起始点在地图上的位置
 * @param end
 *            输出的结束点在地图上的位置
 * @param playerPos1
 *            玩家1的当前位置
 * @param playerPos2
 *            玩家2的当前位置
 */
public void showLine2(int start, int end, int playerPos1, int playerPos2) {
for (int i = end - 1; i >= start; i--) {
System.out.print(getGraph(map[i], i, playerPos1, playerPos2));
}
} /**
 * 输出地图的右竖列
 * 
 * @param start
 *            输出的起始点在地图上的位置
 * @param end
 *            输出的结束点在地图上的位置
 * @param playerPos1
 *            玩家1的当前位置
 * @param playerPos2
 *            玩家2的当前位置
 */
public void showRLine(int start, int end, int playerPos1, int playerPos2) {
for (int i = start; i < end; i++) {
for (int j = 28; j > 0; j--) { 
System.out.print("  ");
} System.out.print(getGraph(map[i], i, playerPos1, playerPos2));
System.out.println();
}
} /**
 * 输出地图的左竖列
 * 
 * @param start
 *            输出的起始点在地图上的位置
 * @param end
 *            输出的结束点在地图上的位置
 * @param playerPos1
 *            玩家1的当前位置
 * @param playerPos2
 *            玩家2的当前位置
 */
public void showLLine(int start, int end, int playerPos1, int playerPos2) {
for (int i = start; i < end; i++) {
System.out.println(getGraph(map[i], i, playerPos1, playerPos2));
}
} /**
 * 显示对战地图
 * 
 * @param playerPos1
 *            玩家1的当前位置
 * @param playerPos2
 *            玩家2的当前位置
 */
public void showMap(int playerPos1, int playerPos2) {
showLine1(0, 31, playerPos1, playerPos2); // 显示地图第一行
System.out.println(); // 换行
showRLine(31, 35, playerPos1, playerPos2); // 显示地图右竖行
showLine2(35, 66, playerPos1, playerPos2); // 显示地图第二行
System.out.println(); // 换行
showLLine(66, 69, playerPos1, playerPos2); // 显示地图左竖行
showLine1(69, 100, playerPos1, playerPos2); // 显示地图第3行
          public static void main(String[] args) {
Map map = new Map();
map.createMap();
map.showMap(0,0); }
}
}
在eclipse控制台运行后,地图如图所示:@@∷∷∷∷★¤∷∷■∷∷∷★∷∷∷★∷∷〓∷∷¤∷〓∷■∷∷∷
                                                            ∷
                                                            ∷
                                                            ★
                                                            ∷
∷★〓∷∷■∷∷∷∷¤∷∷∷∷★∷∷∷∷〓∷∷∷∷¤∷★∷∷∷



¤∷∷〓∷∷∷∷∷∷∷★∷∷¤∷∷∷∷〓∷〓∷∷■★∷∷∷∷∷状况:
在Map()类的showRLine()方法里,内循环定义的是28次循环.也就是输出28个"  "(双空格).
但在控制台输出的地图中,第2,3,4,5行,分明每行都输出了30个"符号位"(就是一个"∷"符号所占的空间),然后才输出"∷".补充说明:
在我把控制台显示的地图复制进本贴后,发现地图是如下显示的,跟eclipse控制台显示的不同(有两个"符号位"的区别):@@∷∷∷∷★¤∷∷■∷∷∷★∷∷∷★∷∷〓∷∷¤∷〓∷■∷∷∷
                                                        ∷
                                                        ∷
                                                        ★
                                                        ∷
∷★〓∷∷■∷∷∷∷¤∷∷∷∷★∷∷∷∷〓∷∷∷∷¤∷★∷∷∷



¤∷∷〓∷∷∷∷∷∷∷★∷∷¤∷∷∷∷〓∷〓∷∷■★∷∷∷∷∷提问:
为什么会这样?
劳智者详细解答.
谢谢!

解决方案 »

  1.   

    这不是什么大问题,这跟你的eclipse的控制台的输出字体有关。跟程序没有任何关系。但我研究好久,都没整明白eclipse里面怎么设置控制台的字体。请各位高人解决。
      

  2.   

    在 Eclipse 里把控制台视图的字体改成 Fixedsys 后看到的结果就跟在真正 CMD 下看到的一样了。
      

  3.   

    设置方法:
    window 菜单 -> Preferences 打开设置对话框,
    在左面找到 General -> Appearance -> Colors and Fonts 一项,
    右面列表里找到 Debug -> Cansole font 后双击,
    选择 Fixedsys 字体确定就好了,字体大小不用改。