0

我创建了一个批处理文件,它使用变量 %random% 选择随机扑克牌。批处理脚本不断循环,直到 %random% 介于 1 和 13 之间,然后再次为西装执行此操作。然后,我将设置为数字的变量转换为文本,因此批处理文件会显示如下内容:红桃四或黑桃王。唯一的问题是,它需要永远!如果你打开 CMD.exe 并输入

Echo %random%

并这样做,直到数字介于 1 和 4 之间,你将永远在那里。即使你把它放入一个批处理文件并使用循环,它仍然需要大约二十秒。有没有办法通过在随机数生成之前缩小搜索范围来缩短时间?我真的不确定。如果它有帮助,或者你不能理解我,这里是代码:

@echo off
:loop
cls
echo generating card...
set num=%random%
if /i %num% GTR 13 goto loop
if /i %num% LSS 1 goto loop
goto next
:next
set suit=%random%
if /i %suit% GTR 4 goto next
if /i %suit% LSS 1 goto next
goto next2
:next2
if %num%==11 set num=jack
if %num%==12 set num=queen
if %num%==13 set num=king
goto next3
:next3
if %suit%==1 set suiter=Hearts
if %suit%==2 set suiter=Diamonds
if %suit%==3 set suiter=Clubs
if %suit%==4 set suiter=Spades
goto ech
:ech
echo %num% of %suiter%
echo.
echo.
echo.
echo press any key to choose again
pause >nul
goto loop
4

2 回答 2

2

您可以在第一次尝试时使用一些数学运算来获得 1 到 13 之间的数字:

set /a num=13*%random%/32768+1 

和 1 和 4 一样

set /a suit=4*%random%/32768+1

请参阅如何在 BATCH 脚本中使用随机?- 和你问的很相似

于 2013-09-27T22:38:57.953 回答
1

您可以使用简单的余数运算完全消除搜索,从而将生成的随机数限制在 [1,13] 和 [1,4] 范围内。这也将大大简化代码。您可以使用可用于算术的“set /a”命令来实现这一点。只需将脚本更改为:

@echo off
:loop
cls
echo generating card...
set /a num=%random% %% 13 + 1
set /a suit=%random% %% 4 + 1
if %num%==11 set num=jack
if %num%==12 set num=queen
if %num%==13 set num=king
if %suit%==1 set suiter=Hearts
if %suit%==2 set suiter=Diamonds
if %suit%==3 set suiter=Clubs
if %suit%==4 set suiter=Spades
goto ech
:ech
echo %num% of %suiter%
echo.
echo.
echo.
echo press any key to choose again
pause >nul
goto loop

祝你好运!

于 2013-09-27T22:37:16.523 回答