让我们看看以下do-while循环.这很明显,毫无疑问.
do
{
System.out.println("Hello world");
break;
} while(false);
Run Code Online (Sandbox Code Playgroud)
这很明显,只需在控制台上显示字符串Hello world并退出.
现在,以下版本do-while似乎陷入无限循环,但事实并非如此.它还在控制台上显示字符串Hello world并以静默方式退出.
do
{
System.out.println("Hello world");
continue;
} while(false);
Run Code Online (Sandbox Code Playgroud)
让我们看看另一个do-while带有标签的版本,如下所示.
label:do
{
System.out.println("Hello world");
continue label;
} while(false);
Run Code Online (Sandbox Code Playgroud)
它也会在控制台上显示消息Hello world并退出.它不是一个无限循环,因为它似乎意味着这个场景中的所有版本都以相同的方式工作.怎么样?
尽管python并未明确允许do-while循环,但至少有3种合理的方式来实现它们:
1)
while True:
#loop body
if not expr():
break
Run Code Online (Sandbox Code Playgroud)
2)
x = True
while x:
#loop body
x = expr()
Run Code Online (Sandbox Code Playgroud)
3)
def f():
#loop body
f()
while expr():
f()
Run Code Online (Sandbox Code Playgroud)
更不用说这里提到的其他方法(例如协程,try-except子句,迭代器等),我认为它们在大多数情况下都是非Python的。我什至看到一些答案争辩说do-while循环不是Python的,但我不知道通用的替代方法。
哪种方法最适合pythonic?它们都有其独特之处:1)以无限循环开始,2)首先创建一个不透明变量,3)定义一个新函数。有谁有更好的方法?
我有一个包含10个项目的向量(为简单起见所有相同的类称为'a').我想要做的是检查'A'不是a)隐藏墙壁或b)隐藏另一个'A'.我有一个碰撞功能,可以做到这一点.
这个想法只是让这个循环类通过并将'A'移动到下一个位置,如果该药水引起碰撞,那么它需要在屏幕上给自己一个新的随机位置.由于屏幕较小,因此很有可能将元素放在另一个(或墙顶等)上.代码的逻辑在我的脑海中运行良好 - 但调试代码时对象只是卡在循环中,并保持在相同的位置.'A'应该在屏幕上移动,但它保持静止!
当我注释掉Do while循环,并移动'MoveObject()'函数时,代码完美地运行'A'正在屏幕上移动.只是当我尝试添加额外的功能时它就不起作用了.
void Board::Loop(void){
//Display the postion of that Element.
for (unsigned int i = 0; i <= 10; ++i){
do {
if (checkCollisions(i)==true){
moveObject(i);
}
else{
objects[i]->ResetPostion();
}
}
while (checkCollisions(i) == false);
objects[i]->SetPosition(objects[i]->getXDir(),objects[i]->getYDir());
}
}
Run Code Online (Sandbox Code Playgroud)
下面的类是碰撞检测.我稍后会扩展.
bool Board::checkCollisions(int index){
char boundry = map[objects[index]->getXDir()][objects[index]->getYDir()];
//There has been no collisions - therefore don't change anything
if(boundry == SYMBOL_EMPTY){
return false;
}
else{
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激.我会给你买一个虚拟啤酒:-)
谢谢
编辑:
ResetPostion - >这将使元素A在屏幕上的随机位置moveObject - >这将查看对象的方向并适当调整x和Y线.
这样做,虽然:
do
{
i++;
++j;
System.out.println( i * j );
}
while ((i < 10) && (j*j != 25));
Run Code Online (Sandbox Code Playgroud)
我现在正在学习do-while vs,并希望使用while重写上面的java片段(已经声明和初始化).以下重写代码是否正确:
而:
while ((i < 10) && (j*j != 25))
{
i++;
++j;
System.out.println( i * j );
}
Run Code Online (Sandbox Code Playgroud)
干杯
我正在尝试执行一些扫描用户输入值的代码.这个动作包含在我写的自定义方法中,名为getTriangleDim(); 该方法读入users int值,确保它在某个范围内,然后返回输入的int值.该方法效果很好,我没有任何问题.
当我为getTriangleDim()方法输入非int值时出现问题.它给我一个InputMismatchException错误.我已经在do-while循环中编写了一个try-catch语句来尝试修复此问题.但这是我第一次使用try-catch语句,而我显然错过了一些东西.
以下是嵌套在do-while循环中的try-catch语句的代码:
//loop to scan for triangle dimension
boolean bError = true;
int triangle;
do{
try {
triangle = getTriangleDim();
bError=false;
}
catch (Exception e){
System.out.println("You did not enter an integer, please enter an integer value");
triangle = getTriangleDim();
}
}while (bError);
Run Code Online (Sandbox Code Playgroud)
如果我通过输入一个char值代替int来测试它,它实际捕获错误一次,然后打印我的"你没有....."语句.但是,如果我重新输入另一个非int数字,我再次得到一个运行时错误,说.......你猜对了........ InputMismatchException错误.
我的方法的代码在这里:
//method for scanning triangle dimensions from keyboard
public static int getTriangleDim(){
int triangle = 0;
Scanner keyboard = new Scanner(System.in);
do{
System.out.print("Enter a non-zero integer length (+/-1 - +/-16): ");
triangle = …Run Code Online (Sandbox Code Playgroud) java exception-handling try-catch do-while inputmismatchexception
昨天我读了关于for循环的Java中的逗号运算符.这符合我的预期.我想到了这种结构,但它没有按预期工作.
';' expected
} while((userInput < 1 || userInput > 3), wrongInput = true);
';' expected
} while((userInput < 1 || userInput > 3), wrongInput = true);
Run Code Online (Sandbox Code Playgroud)
我的想法是,在一次迭代后,如果userInput不在1和3之间,它应该设置布尔值wrongInput,true以便在下一次迭代期间显示错误消息.表明该内容userInput无效.
private int askUserToSelectDifficulty() {
int userInput;
Boolean wrongInput = false;
do{
if(wrongInput) println("\n\t Wrong input: possible selection 1, 2 or 3");
userInput = readInt();
} while((userInput < 1 || userInput > 3), wrongInput = true);
return userInput;
}
Run Code Online (Sandbox Code Playgroud)
我想这也许是因为它在for循环的等效部分内部,这是无效的语法.因为您不能在条件部分中使用逗号运算符?
我看到在for循环中使用逗号运算符的示例:在Java Java 中为for循环提供多个条件- …
所以我对do/ whileloop 有一个普遍的问题.我正在学习C++,我知道你可以这样写:
do{
....
} while(a<10 && cout<<"message");
Run Code Online (Sandbox Code Playgroud)
关键是,我知道这在c ++中是可行的,但我们真的这样做吗?我的意思是," 内部的cout东西" ?
以下代码将提供的字符串/行拆分为字符.为什么循环重复最后一次字符串两次?怎么解决?
#include <iostream>
#include <vector>
#include <sstream>
#include <string>
using namespace std;
int main()
{
string main, sub;
cout << "Enter string: ";
getline(cin, main);
istringstream iss(main);
do
{
iss >> sub;
cout << sub << endl;
vector<char> v(sub.begin(), sub.end());
for(int i = 0; i < v.size(); i++)
{
cout << v[i] << endl;
}
} while (iss);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
你好,世界
你好
^ h
è
升
升
Ø
世界
w ^
ō
[R
升
d
你好 …
所以我有一些以do while循环为中心的代码.
string token;
var count = 0;
var checkDataLength= data.Length == 16;
do
{
count = 0;
token = GenerateToken(data, start, end);
if (checkDataLength)
{
if (Mod120Check(token))
{
count += 1;
}
}
if (IsCompliant(token))
{
count += 1;
}
}
while (count > 0);
return token;
Run Code Online (Sandbox Code Playgroud)
基本上,我正在生成一个令牌,并且为了使此令牌有效,必须将Mod120Check和IsCompliant检查失败.我无法改变这些方法返回数据的方式.
虽然上面的代码有效,但我觉得它很难看,我想知道是否有人有更好的方法吗?
谢谢
我是一名基础C#课程的新手,我在完成工作任务时遇到了麻烦.我建了一个基本的计算器,它工作正常.现在我必须添加一个名为"Sum"的新按钮,它将从我的一个盒子(number1Txtbox)中获取输入,并通过循环将其添加到自身10次.
我倒了我的c#书的页面,无法想出这个.我想出了如何使用计数器等初始化循环,我只是无法让它在我的生活中工作.
有人告诉我使用for循环,然后切换到do while循环.这对我来说没有多大意义,我以为我可以用for循环来做到这一点.所以我的问题是:
1)我甚至需要切换到do while循环才能执行此操作吗?
2)我做错了什么?
这是我到目前为止所做的,当我在文本框中输入一个数字后尝试点击总和按钮时,它只会使我的程序冻结:
private void sumBtn_Click(object sender, EventArgs e)
{
int counter;
int loopAnswer;
int number1;
number1 = int.Parse(number1Txtbox.Text);
for (counter = 1; counter <= 10; counter++)
{
loopAnswer = number1 + number1;
do
{
loopAnswer = loopAnswer + number1;
} while (counter <= 10);
equalsBox.Text = loopAnswer.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
多谢你们!