我一直致力于一个项目,需要多解释才能告诉你这是什么。
我想让程序给你写一张地图(在控制台上),所以我写了所有建筑物的X和Y,它们将在地图上,以及homeChars' chars意味着,建筑物如何在地图上看。
首先,我尝试将控制台写入第一行,这应该是AOOOS(每个字母控制台写在另一行,我将来会改变它),但不知何故,控制台抛出AOOOO而不是
public static void main(String []args){
int homeXs[] = {1, 1, 3, 3};
int homeYs[] = {1, 5, 3, 3};
char homeChars[] = {'A', 'S', 'H', 'D'}; //ARMORY, STORE, HOME, DUNGEONS
char homePlace[] = {'O', 'O', 'O', 'O', 'O'};
for(int a = 0; a <= 4; a++){
for(int b = 0; b <= 3; b++){
if (homeYs[b] == 1) {
if (homeXs[b] == a+1) {
homePlace[a] = homeChars[b];
}
}
}
}
for(int c = 0; c <= 4; c++) {
System.out.println(homePlace[c]);
}
}
Q1:为什么控制台会记下S的内容,哪里有bug以及如何解决?我已深入研究代码,但无法找到它......
Q2:如何让AOOOS写在同一行?如果我做:
System.out.println(homePlace [0] + homePlace [1] + homePlace [2] + homePlace [3] + homePlace [4]);
代码会很丑陋而且它无法正常工作,不知何故它会抛出一个数字......
任何帮助将不胜感激,
Enej Lah
答案 0 :(得分:1)
a = 0, b = 0
中的唯一值是AOOOS
。因此,无法制作阵列System.out.print()
。 答案 1 :(得分:0)
首先,我建议您重构代码,例如
if (homeYs[b] == 1) {
if (homeXs[b] == a+1) {
homePlace[a] = homeChars[b];
}
}
等于:
if (homeYs[b] == 1 && homeXs[b] == a+1) {
homePlace[a] = homeChars[b];
}
将导致:
for(int a = 0; a <= 4; a++){
for(int b = 0; b <= 3; b++){
if (homeYs[b] == 1 && homeXs[b] == a+1) {
homePlace[a] = homeChars[b];
}
}
所以它会使你的意图更加清晰。因此,您现在可以看到为什么要在控制台中获得此结果。
关于打印,您可以考虑以下列方式使用Java 8流API:
Arrays.asList(homePlace)
.stream()
.forEach(System.out::print);
System.out.println()
要使流API工作,需要确保您的项目配置了Java 1.8,例如使用maven,以下将执行此操作:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<target>1.8</target>
<source>1.8</source>
<testTarget>1.8</testTarget>
</configuration>
</plugin>
</plugins>
</build>