我是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控制台显示的不同(有两个"符号位"的区别):@@∷∷∷∷★¤∷∷■∷∷∷★∷∷∷★∷∷〓∷∷¤∷〓∷■∷∷∷
∷
∷
★
∷
∷★〓∷∷■∷∷∷∷¤∷∷∷∷★∷∷∷∷〓∷∷∷∷¤∷★∷∷∷
∷
∷
∷
¤∷∷〓∷∷∷∷∷∷∷★∷∷¤∷∷∷∷〓∷〓∷∷■★∷∷∷∷∷提问:
为什么会这样?
劳智者详细解答.
谢谢!
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控制台显示的不同(有两个"符号位"的区别):@@∷∷∷∷★¤∷∷■∷∷∷★∷∷∷★∷∷〓∷∷¤∷〓∷■∷∷∷
∷
∷
★
∷
∷★〓∷∷■∷∷∷∷¤∷∷∷∷★∷∷∷∷〓∷∷∷∷¤∷★∷∷∷
∷
∷
∷
¤∷∷〓∷∷∷∷∷∷∷★∷∷¤∷∷∷∷〓∷〓∷∷■★∷∷∷∷∷提问:
为什么会这样?
劳智者详细解答.
谢谢!
window 菜单 -> Preferences 打开设置对话框,
在左面找到 General -> Appearance -> Colors and Fonts 一项,
右面列表里找到 Debug -> Cansole font 后双击,
选择 Fixedsys 字体确定就好了,字体大小不用改。