这是我正在处理的一些代码,用这样的模式构建一个迷宫,我实现了2D数组。
我的想法,首先是试图建立一个完整的' @'在二维数组中,我给它的每一个奇数行' &#39 ;.它还没有完成
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Maze Dimension: ");
int dim = sc.nextInt();
//dimension
char[][] maze = new char[dim][dim];
int baris = maze.length;
System.out.println("rows : " + baris);
int kolom = maze[0].length;
System.out.println("column : " + kolom);
//initialize rows and column;
int initBaris;
int initKolom;
for (initBaris = 0; initBaris < baris; initBaris++) {
if (initBaris % 2 != 1) {
for (initKolom = 0; initKolom < kolom; initKolom++) {
System.out.print(maze[initBaris][initKolom] = '@');
}
} else {
for (initKolom = 0; initKolom < kolom ; initKolom++) {
System.out.print(maze[initBaris][initKolom] = ' ');
}
} System.out.println();
}
}
}
我的代码结果如下所示:
@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@
我想要如下结果:
@ @@@@@@@@@@@@@
@ @
@@@@@@@@@@@@@ @
@ @
@ @@@@@@@@@@@@@
@ @
@@@@@@@@@@@@@ @
@ @
@ @@@@@@@@@@@@@
@ @
@@@@@@@@@@@@@ @
@ @
@ @@@@@@@@@@@@@
@ @
@@@@@@@@@@@@@ @
我在这里缺乏逻辑,简单。含义 - 我不知道如何达到预期的结果,因此寻找有关如何调整给定代码的指导。
答案 0 :(得分:2)
显然你的&#34;算法&#34;建造迷宫是不够的。有两种方法可以改善:
要理解的一件重要事情:您应该将数组的初始化与打印分开。你知道 - 当你不必担心同时打印它时,使用数组来使其内容正确就容易得多。所以:使用一个或多个步骤初始化数组 - 然后有一个单独的步骤来打印它。
最后:考虑不要将迷宫变成一个字符数组。而是使用布尔值或你的枚举。事实上,你后来想要打印空白和&#34;采取&#34;具有不同字符的插槽不应该驱动迷宫在内部表示的方式。
答案 1 :(得分:2)
@GhostCat是对的。看看你想成为什么样的结果:
//import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
//Scanner sc = new Scanner(System.in);
int dim = 16; //sc.nextInt();
System.out.println("Maze Dimension: " + dim);
//dimension
char[][] maze = new char[dim][dim];
int baris = maze.length;
System.out.println("rows : " + baris);
int kolom = maze[0].length;
System.out.println("column : " + kolom);
//initialize rows and column;
int initBaris;
int initKolom;
baris -= (baris%2 !=0) ? 1 : 2;
for (initBaris = 0; initBaris < baris; initBaris++)
{
System.out.print(maze[initBaris][0] = '@');
if (initBaris % 2 != 1)
{
System.out.print(maze[initBaris][1] = (initBaris%4!=2)?' ':'@');
for (initKolom = 2; initKolom < kolom-2; initKolom++)
{
System.out.print(maze[initBaris][initKolom] = '@');
}
System.out.print(maze[initBaris][kolom-2] = (initBaris%4!=2)?'@':' ');
}
else
{
for (initKolom = 1; initKolom < kolom-1 ; initKolom++)
{
System.out.print(maze[initBaris][initKolom] = ' ');
}
}
System.out.print(maze[initBaris][kolom-1] = '@');
System.out.println();
}
for (initKolom = 0; initKolom < kolom ; initKolom++)
{
System.out.print(maze[baris][initKolom] = '@');
}
}
}
请勿尝试立即编写整个算法。逐步创建它。
1)你的迷宫是否适用于每一行?
2)是否有与其他线完全不同的线?
3)你的任何一行都能找到一种模式吗?
4)描述通路线的模式。
6)你可以识别出多少种墙线?
7)描述每种类型墙线的图案。
等
...
在https://ideone.com/DBOJRy,这有效:
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x0000000137304bab, pid=55750, tid=0x000000000000080b
#
# JRE version: Java(TM) SE Runtime Environment (8.0_131-b11) (build 1.8.0_131-b11)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.131-b11 mixed mode bsd-amd64 compressed oops)
# Problematic frame:
# C [liblwjgl_opengl.dylib+0xcbab]
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# An error report file with more information is saved as:
# /Users/leobattle/Desktop/Programming/Java/Minecraft Modding/GLGame/GLGame/hs_err_pid55750.log
#
# If you would like to submit a bug report, please visit:
# http://bugreport.java.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
答案 2 :(得分:0)
考虑到您当前的代码,除了GhostCat建议之外,您应该明确申请:
然后你的结构初始化中有两个“逻辑块”:一个用于奇数行,一个用于偶数行。
对于偶数行(迷宫中的走廊),只需填写第一列和最后一列。
现在你的奇数行,你想要交替“门”,不是吗?您需要一个“开关/中断器”,它指示状态:列索引2(行的开头)或索引N-1(行的结尾)的门。有条件检查行索引或有一个布尔值,它会做得很好。使用布尔值,在每个奇数行进程中更改其状态。然后,当您的布尔值为true时,将门放在行的开头,否则放在最后。如果你想让它关闭,不要忘记不要在最后一行做。