2016-03-24 7 views
0

Hallo Powershell-Experten,Random Number summiert sich zu einer definierten Anzahl mit Powershell

ich auf einem einfachen Code arbeite, das eine Liste von Produkten und Aufgabe produziert (ein Produkt mehr Aufgabe hat) mit der Zeit damit verbringen " Nach dem Zufallsprinzip". Ich möchte, dass die totalTime die Zeit bis 40 (ganzzahlig) addiert (und kann wie benutzerdefiniert geändert werden, z. B. 50, 60, usw.).

Der Code funktioniert gut, aber es fügt nur 40 nicht hinzu. Können Sie bitte helfen?

Bonus: Kann ich einem Produkt oder einer Aufgabe Gewicht zuweisen, damit es bei der zufälligen Auswahl eine Priorität erhält? z.B. Ich möchte mehr Zeit für P3 und P7 mit T3, T12 und T15 haben. Es sollte noch hinzufügen, bis zu 40.

cls 
[int]$totalTime = 40 # This will be the number that the TotalTime Adds up 

$taskCategories = @("T1" 
"T2", 
"T3", 
"T4", 
"T5", 
"T6", 
"T7", 
"T8", 
"T9", 
"T10", 
"T11", 
"T12", 
"T13", 
"T14", 
"T15") 

$products = @("P1" 
, "P2" 
, "P3" 
, "p4" 
, "P5" 
, "P6" 
, "P7" 
, "P8" 
, "P9" 
, "P10") 

for ($i = 0; $i -le 1; ++$i) 
{ 
    $totalTime = 0 
    while ($totalTime -lt 40) 
    { 
     [int]$task = Get-Random -Minimum 0 -Maximum 16 
     [int]$product = Get-Random -Minimum 0 -Maximum 11 
     $time = Get-Random -Minimum 4 -Maximum 10 

     Write-Output "$($products[$product])`t$($taskCategories[$task])`t$time" 
     $totalTime = $totalTime + $time 
    } 
} 

Im Folgenden ist die Ausgabe, die ich erhalte:

enter image description here

Antwort

1
cls 
[int]$totalTime = 40 # This will be the number that the TotalTime Adds up 

$taskCategories = @("T1", "T2", "T3", "T4", "T5", 
        "T6", "T7", "T8", "T9", "T10", "T11", "T12", "T13", "T14", "T15") 

$products = @("P1", "P2", "P3", "P4", "P5", "P6", "P7", "P8", "P9", "P10") 

$totalTime = 0 
$MinValue = 4 

for ($i = 0; $i -le 1; ++$i) 
{ 

    while ($totalTime -lt 40) 
    { 
     if (40 - $totalTime -ge 10) 
     { 
     $MaxValue = 10 
     } 
     else 
     { 
     $MaxValue = 40 - $totalTime 
     } 

     if ($MinValue -lt $MaxValue) 
     { 
     $MinValue = 4 
     } 
     else 
     { 
     $MinValue = $MaxValue 
     } 


     [int]$task = Get-Random -Minimum 0 -Maximum 15 
     [int]$product = Get-Random -Minimum 0 -Maximum 10 
     if ($MinValue -eq 4) 
     { 
     $time = Get-Random -Minimum $MinValue -Maximum $MaxValue 
     } 
     else 
     { 
     $time = $MaxValue 
     } 
     $totalTime = $totalTime + $time 
     $Remainder = 40 - $totalTime 
     if ($Remainder -le 3) 
     { 
     $time = $time + $Remainder 
     $totalTime = $totalTime + $time 
     } 

     Write-Output "$($products[$product])`t$($taskCategories[$task])`t$time" 

    } 
} 
+0

Danke @kenny .. das funktioniert. – Kin

1

Verschieben $totalTime aus der FOR-Schleife, die funktionieren wird ..

####### 
$totalTime = 0 
####### 

for ($i = 0; $i -le 1; ++$i) 
{ 
    while ($totalTime -lt 40) 
    { 
     [int]$task = Get-Random -Minimum 0 -Maximum 16 
     [int]$product = Get-Random -Minimum 0 -Maximum 11 
     $time = Get-Random -Minimum 4 -Maximum 10 

     Write-Output "$($products[$product])`t$($taskCategories[$task])`t$time" 
     $totalTime = $totalTime + $time 
    } 
} 
+0

Silly me .. Ich hätte darüber nachdenken sollen. Aber selbst wenn ich die '$ totalTime' nach deinem Vorschlag einsetze, ist die Zeit etwas über 40. Danke für deine Hilfe. – Kin

Verwandte Themen