Loops 在这种情况下,如何使用循环或goto来缩短代码? 我对批处理文件是新的,这对于一些知道批处理文件的人来说是一个愚蠢的问题,但是我不能用C++或其他编程的方式来达到预期的结果。我试图做的是为每个2x2数组随机将三个1存储到元素中。提前谢谢。完整代码如下: @echo off setlocal EnableDelayedExpansion rem ========Creating four 2x2 zero arrays for /l %%z in (0,1,3) do ( for /l %%y in (0,1,1) do ( for /l %%x in (0,1,1) do ( set map[%%x][%%y][%%z]=0 ) ) ) rem ========Putting three 1s in elements randomly **(How do I shorten this part?)** set /a count=3 :while0 set /a i=!Random!%%2 set /a j=!Random!%%2 set /a sth=map[!i!][!j!][0] if !sth! EQU 0 ( set map[!i!][!j!][0]=1 set /a count-=1 ) if not !count! EQU 0 GOTO while0 set /a count=3 :while1 set /a i=!Random!%%2 set /a j=!Random!%%2 set /a sth=map[!i!][!j!][1] if !sth! EQU 0 ( set map[!i!][!j!][1]=1 set /a count-=1 ) if not !count! EQU 0 GOTO while1 set /a count=3 :while2 set /a i=!Random!%%2 set /a j=!Random!%%2 set /a sth=map[!i!][!j!][2] if !sth! EQU 0 ( set map[!i!][!j!][2]=1 set /a count-=1 ) if not !count! EQU 0 GOTO while2 set /a count=3 :while3 set /a i=!Random!%%2 set /a j=!Random!%%2 set /a sth=map[!i!][!j!][3] if !sth! EQU 0 ( set map[!i!][!j!][3]=1 set /a count-=1 ) if not !count! EQU 0 GOTO while3 rem ========Result echo !map[0][0][0]!!map[1][0][0]! echo !map[0][1][0]!!map[1][1][0]! echo. echo. echo !map[0][0][1]!!map[1][0][1]! echo !map[0][1][1]!!map[1][1][1]! echo. echo. echo !map[0][0][2]!!map[1][0][2]! echo !map[0][1][2]!!map[1][1][2]! echo. echo. echo !map[0][0][3]!!map[1][0][3]! echo !map[0][1][3]!!map[1][1][3]! echo. echo. pause @ECHO关闭 setlocal EnableDelayedExpansion rem========创建四个2x2零阵列 :重新启动 对于(0,1,3)do中的/l%%z( 对于(0,1,1)do中的/l%%y( 对于/l%%x英寸(0,1,1)do( 设置映射[%%x][%%y][%%z]=0 ) ) ) ::以1s随机加载阵列 对于(1,1,3)DO中的/L%%c( SET/a x=!random!%%2,y=!random!%%2,z=!random!%%4 对于(0,1,3)do中的/l%%z( 对于(0,1,1)do中的/l%%y( 对于/l%%x英寸(0,1,1)do( 如果%%z==!z!如果%%y==!y!如果%%x==!x( 如果!映射[%%x][%%y][%%z]!==1转到重新启动 集合/映射[%%x][%%y][%%z]=1 ) ) ) ) ) ::显示 对于(0,1,3)DO中的/L%%z( 对于(0,1,1)中的/L%%y,执行ECHO!映射[0][%%y][%%z]!!映射[1][%%y][%%z]! 回声。 ) 后藤:EOF

Loops 在这种情况下,如何使用循环或goto来缩短代码? 我对批处理文件是新的,这对于一些知道批处理文件的人来说是一个愚蠢的问题,但是我不能用C++或其他编程的方式来达到预期的结果。我试图做的是为每个2x2数组随机将三个1存储到元素中。提前谢谢。完整代码如下: @echo off setlocal EnableDelayedExpansion rem ========Creating four 2x2 zero arrays for /l %%z in (0,1,3) do ( for /l %%y in (0,1,1) do ( for /l %%x in (0,1,1) do ( set map[%%x][%%y][%%z]=0 ) ) ) rem ========Putting three 1s in elements randomly **(How do I shorten this part?)** set /a count=3 :while0 set /a i=!Random!%%2 set /a j=!Random!%%2 set /a sth=map[!i!][!j!][0] if !sth! EQU 0 ( set map[!i!][!j!][0]=1 set /a count-=1 ) if not !count! EQU 0 GOTO while0 set /a count=3 :while1 set /a i=!Random!%%2 set /a j=!Random!%%2 set /a sth=map[!i!][!j!][1] if !sth! EQU 0 ( set map[!i!][!j!][1]=1 set /a count-=1 ) if not !count! EQU 0 GOTO while1 set /a count=3 :while2 set /a i=!Random!%%2 set /a j=!Random!%%2 set /a sth=map[!i!][!j!][2] if !sth! EQU 0 ( set map[!i!][!j!][2]=1 set /a count-=1 ) if not !count! EQU 0 GOTO while2 set /a count=3 :while3 set /a i=!Random!%%2 set /a j=!Random!%%2 set /a sth=map[!i!][!j!][3] if !sth! EQU 0 ( set map[!i!][!j!][3]=1 set /a count-=1 ) if not !count! EQU 0 GOTO while3 rem ========Result echo !map[0][0][0]!!map[1][0][0]! echo !map[0][1][0]!!map[1][1][0]! echo. echo. echo !map[0][0][1]!!map[1][0][1]! echo !map[0][1][1]!!map[1][1][1]! echo. echo. echo !map[0][0][2]!!map[1][0][2]! echo !map[0][1][2]!!map[1][1][2]! echo. echo. echo !map[0][0][3]!!map[1][0][3]! echo !map[0][1][3]!!map[1][1][3]! echo. echo. pause @ECHO关闭 setlocal EnableDelayedExpansion rem========创建四个2x2零阵列 :重新启动 对于(0,1,3)do中的/l%%z( 对于(0,1,1)do中的/l%%y( 对于/l%%x英寸(0,1,1)do( 设置映射[%%x][%%y][%%z]=0 ) ) ) ::以1s随机加载阵列 对于(1,1,3)DO中的/L%%c( SET/a x=!random!%%2,y=!random!%%2,z=!random!%%4 对于(0,1,3)do中的/l%%z( 对于(0,1,1)do中的/l%%y( 对于/l%%x英寸(0,1,1)do( 如果%%z==!z!如果%%y==!y!如果%%x==!x( 如果!映射[%%x][%%y][%%z]!==1转到重新启动 集合/映射[%%x][%%y][%%z]=1 ) ) ) ) ) ::显示 对于(0,1,3)DO中的/L%%z( 对于(0,1,1)中的/L%%y,执行ECHO!映射[0][%%y][%%z]!!映射[1][%%y][%%z]! 回声。 ) 后藤:EOF,loops,batch-file,goto,Loops,Batch File,Goto,中间块设置要插入的1数。然后选择三个随机数并分配给x、y和z,三个嵌套的for/L命令只需将%%x..%%z设置为x..z的每个可能的值组合,但为方便起见,以可变的方式设置。当循环选择正确的组合时,将测试地图上的该点。如果是1,请重新开始。如果不是,则将其设置为1 显示程序似乎显而易见 @echo off setlocal EnableDelayedExpansion rem ========Creating four 2x2 one arrays for /l %%z in (0,1,3)

中间块设置要插入的1数。然后选择三个随机数并分配给
x
y
z
,三个嵌套的
for/L
命令只需将
%%x..%%z
设置为
x..z
的每个可能的值组合,但为方便起见,以
可变的方式设置。当循环选择正确的组合时,将测试地图上的该点。如果是
1
,请重新开始。如果不是,则将其设置为
1

显示程序似乎显而易见

@echo off
setlocal EnableDelayedExpansion

rem ========Creating four 2x2 one arrays
for /l %%z in (0,1,3) do (
    for /l %%y in (0,1,1) do (
        for /l %%x in (0,1,1) do (
            set map[%%x][%%y][%%z]=1
        )
    )
)

rem ========Putting one 0 in an element randomly
for /l %%z in (0,1,3) do (
    set /a i=!Random!%%2
    set /a j=!Random!%%2
    set map[!i!][!j!][%%z]=0
)

rem ========Result
for /l %%z in (0,1,3) do (
   echo !map[0][0][%%z]!!map[1][0][%%z]!
   echo !map[0][1][%%z]!!map[1][1][%%z]!
   echo/
   echo/
)

pause
编辑:新版本,满足零可变数的新要求

@echo off
setlocal EnableDelayedExpansion

rem ========Creating four 2x2 arrays using three 1s and one 0 to populate each
for /l %%z in (0,1,3) do (
    set "digits=1110" & set "num=4"
    for /l %%y in (0,1,1) do (
        for /l %%x in (0,1,1) do (
            rem Get a random number between 0 and "num"
            set /A ran=!random!%%num, ranP1=ran+1, num-=1
            rem Use it to extract a random digit from "digits"
            for /F "tokens=1,2" %%i in ("!ran! !ranP1!") do (
                set "map[%%x][%%y][%%z]=!digits:~%%i,1!"
                set "digits=!digits:~0,%%i!!digits:~%%j!"
            )
        )
    )
)

rem ========Result
for /l %%z in (0,1,3) do (
   echo !map[0][0][%%z]!!map[1][0][%%z]!
   echo !map[0][1][%%z]!!map[1][1][%%z]!
   echo/
   echo/
)

pause

Aacini的代码缩短了一点(由于标题文本):

@Echo关闭
SetLocal EnableDelayedExpansion
Rem========创建四个2x2单阵列
对于(0 1 3)中的/L%%A,对于(0 1 1)中的/L%%B,对于(0 1 1)中的/L%%C,对于(0 1 1
)设置“m[%%C%%B%%A]=1”
Rem========在元素中随机放置一个0
对于/L%%A(0 1 3
)不要设置/A B=!随机!%%2,C=!随机!%%2设置“m[!B!!C!%%A]=0”(&S)
Rem========结果
对于/L%%A(0 1 3
)做回声!m[00%%A]!!m[10%%A]&回声!m[01%%A]!!m[11%%A]&回音(&E)(
暂停

请不要优先接受这个答案,而不是他们的答案

谢谢你的回答,但是如果答案超过一个零呢?在这种情况下,那么问题就不同了
;)
查看我的编辑…那么?我的新代码解决了您的问题了吗?如果是,那么您可以通过绿色复选标记选择此作为最佳答案…我试图做的是将三个1随机存储到每个2x2数组中,这样应该有十二个1,但您的代码似乎总共只生成三个1,并且看起来需要很长时间才能完成编译。