仅当所有“机器人”都直立时,我才想中断while
循环。 (*这些机器人是微型USB机器人)。
.upRight()
在机器人站立时返回true
,在机器人站立时返回false
。
public static boolean checkSomething() throws ... {
while (true) {
for (i = 0; i < bots; i++) { // bots = 2
if (!theMainBots[i].isUpright()) {
...
Thread.sleep(1000);
}
else {
return true;
}
}
}
我面临的问题是,如果isUpright()
方法对第一个“机器人”返回true,则所有其他机器人均未选中,并可能返回false
。目的是在继续操作之前等待用户将机器人置于直立位置。
答案 0 :(得分:1)
如果您要等到用户使机器人直立起来,则可以将if
更改为while
:
while (true) {
for (i = 0; i < bots; i++) { // bots = 2
while(!theBots[i].isUpright()) {
System.out.println("Please ensure I'm upright");
Thread.sleep(500);
}
}
return true;
}
这将循环遍历Array
中的每个元素,并且当任何给定的bot都没有直立时,它将循环并休眠直到bot直立为止。在这种情况下,您无需进行while(true)
循环:
public static boolean checkUpright() throws InterruptedException {
for (i = 0; i < bots; i++) { // bots = 2
while(!theBots[i].isUpright()) {
System.out.println("Please ensure I'm upright");
Thread.sleep(500);
}
}
return true;
}
答案 1 :(得分:1)
实现此目的的一种方法是使用一个变量,该变量将确定何时退出循环。这里的问题是,您还需要将<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/Background"
tools:context="activities.MainMenu">
<ListView
android:id="@+id/MainListDecks"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/MainDeckNom"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginEnd="20dp"
android:layout_marginBottom="22dp"
android:text="Button" />
</RelativeLayout>
循环更改为for
循环。这是为什么?因为您不知道刚才检查的机器人是否被移动。另外,除非您想再次检查,否则不必要进行外部循环。因此,代码将最终看起来像这样。
while
答案 2 :(得分:1)
上下文尚不完全清楚,但可能是将逻辑控制与用户交互混合在一起。也许这种方法可能行得通:
public static boolean checkUpright() throws InterruptedException {
while (!areAllBotsUpright()) {
System.out.println("Please ensure I'm upright");
Thread.sleep(500);
}
}
public static boolean areAllBotsUpright() {
for (i = 0; i < bots; i++) {
if (!theBots[i].isUpright()) {
return false;
}
}
return true;
}
答案 3 :(得分:1)
您应该首先检查所有机器人,然后对结果采取行动。不要尝试对检查循环内的结果采取行动。
此外,由于直到所有机器人都直立后代码才返回,因此该方法被错误命名并且不应返回值。
public static void waitUntilAllUpright() throws InterruptedException {
for (;;) { // forever loop
boolean allUpright = true;
for (i = 0; i < bots; i++) {
if (! theBots[i].isUpright()) {
allUpright = false;
break;
}
}
if (allUpright)
return;
System.out.println("Please ensure I'm upright");
Thread.sleep(500);
} // loop back to check all bots again
}
答案 4 :(得分:0)
您可以从机器人数组创建列表,然后使用迭代器遍历该列表 如果特定的机器人是直立的,请使用iterator.remove从列表中将其删除。 外部,直到列表不为空。
Import-Csv "C:\blablabla\filename.csv" | ForEach-Object {
New-ADUser -Name $_.Name `
...
-OtherAttributes @{ProxyAddresses= $_."ProxyAddresses"} # Remove backtick
New-Item -ItemType Directory -Path $_.HomeDirectory # create home path if needed
New-Item -ItemType Directory -Path $_.ProfilePath # create profile path if needed
$ACL = (Get-ACL -Path $_.HomeDirectory) # No need for quotes around properties if they do not contain spaces or other special characters
$FullControlAccessRule = (New-Object System.Security.AccessControl.FileSystemAccessRule(
[System.Security.Principal.NTAccount]"hcc.local\$($_.samAccountName)", # replace $UserName with correct variable
"FullControl", "ContainerInherit, ObjectInherit", "None", "Allow"))
$ACL.AddAccessRule($FullControlAccessRule)
Set-ACL -Path $_.HomeDirectory $ACL
# -> # repeat for profile path if needed
}