选择号码不超过两次

问题描述 投票:0回答:1

我想要一个批处理文件为 99 个变量的列表分配一个随机数。但是,我不希望同一数字分配两次以上。下面的代码似乎不起作用,它向我抛出了

Divide by zero error
。我已经修改过它并在网上寻求帮助,但找不到任何帮助。

我的代码:

@echo off
setlocal enabledelayedexpansion
set /a var=99
for /l %%i in (1,1,50) do set "count_%%i=0"
for /l %%i in (1,1,%var%) do (
    :rand
    set /a rand=!random! %%50 +1
    if !count_%%rand%%! lss 2 (
        set /a var%%i=!rand!
        set /a "count_%%rand%%+=1"
    ) else goto rand
)
for /l %%i in (1,1,%var%) do echo !var%%i!
batch-file cmd
1个回答
0
投票
@ECHO Off
SETLOCAL
for /l %%e in (0,1,99) do SET "var%%e="
for /l %%e in (0,1,99) do CALL :assign %%e
for /l %%e in (1,1,99) do CALL echo var%%e=%%var%%e%%
ECHO -------------------
SET var
GOTO :eof

:assign
set /a rand=%random% %% 100
if DEFINED var%rand% GOTO assign
SET /a var%rand%=1+%1/2
GOTO :EOF

只是方法上的一个小改变。

对于数字 0..99,执行

assign
子例程。

:assign
选择一个随机数 0..99,并重复该选择,直到找到 VAR??尚未分配。它将
1+%1/2
分配给 VAR??

由于

%1
的值为 0..99,因此分配给随机
var
变量的数字将为 1,1,2,2..50,50。

然后用两种不同的方式显示结果。

var0
可以直接忽略。

您的方法根本行不通,因为

code block
(带括号的命令序列)不能包含标签,因为标签终止了块。

© www.soinside.com 2019 - 2024. All rights reserved.